if (err)
                return err;
 
+       err = -EINVAL;
        /* host join errors which can happen before creating the group */
        if (!cfg.p && !br_group_is_l2(&cfg.group)) {
                /* don't allow any flags for host-joined IP groups */
                if (cfg.entry->state) {
                        NL_SET_ERR_MSG_MOD(extack, "Flags are not allowed for host groups");
-                       return -EINVAL;
+                       goto out;
                }
                if (!br_multicast_is_star_g(&cfg.group)) {
                        NL_SET_ERR_MSG_MOD(extack, "Groups with sources cannot be manually host joined");
-                       return -EINVAL;
+                       goto out;
                }
        }
 
        if (br_group_is_l2(&cfg.group) && cfg.entry->state != MDB_PERMANENT) {
                NL_SET_ERR_MSG_MOD(extack, "Only permanent L2 entries allowed");
-               return -EINVAL;
+               goto out;
        }
 
        if (cfg.p) {
                if (cfg.p->state == BR_STATE_DISABLED && cfg.entry->state != MDB_PERMANENT) {
                        NL_SET_ERR_MSG_MOD(extack, "Port is in disabled state and entry is not permanent");
-                       return -EINVAL;
+                       goto out;
                }
                vg = nbp_vlan_group(cfg.p);
        } else {
                err = __br_mdb_add(&cfg, extack);
        }
 
+out:
        return err;
 }