OSDN Git Service

mac80211_hwsim: move HWSIM_ATTR_RADIO_NAME parsing last
authorJohannes Berg <johannes.berg@intel.com>
Fri, 9 Nov 2018 10:32:39 +0000 (11:32 +0100)
committerJohannes Berg <johannes.berg@intel.com>
Fri, 9 Nov 2018 10:32:39 +0000 (11:32 +0100)
Avoid the need to kfree() the name in many places by moving
the name parsing last.

Signed-off-by: Johannes Berg <johannes.berg@intel.com>
drivers/net/wireless/mac80211_hwsim.c

index aa80582..0540834 100644 (file)
@@ -3321,15 +3321,6 @@ static int hwsim_new_radio_nl(struct sk_buff *msg, struct genl_info *info)
        if (info->attrs[HWSIM_ATTR_NO_VIF])
                param.no_vif = true;
 
-       if (info->attrs[HWSIM_ATTR_RADIO_NAME]) {
-               hwname = kasprintf(GFP_KERNEL, "%.*s",
-                                  nla_len(info->attrs[HWSIM_ATTR_RADIO_NAME]),
-                                  (char *)nla_data(info->attrs[HWSIM_ATTR_RADIO_NAME]));
-               if (!hwname)
-                       return -ENOMEM;
-               param.hwname = hwname;
-       }
-
        if (info->attrs[HWSIM_ATTR_USE_CHANCTX])
                param.use_chanctx = true;
        else
@@ -3342,10 +3333,8 @@ static int hwsim_new_radio_nl(struct sk_buff *msg, struct genl_info *info)
        if (info->attrs[HWSIM_ATTR_REG_CUSTOM_REG]) {
                u32 idx = nla_get_u32(info->attrs[HWSIM_ATTR_REG_CUSTOM_REG]);
 
-               if (idx >= ARRAY_SIZE(hwsim_world_regdom_custom)) {
-                       kfree(hwname);
+               if (idx >= ARRAY_SIZE(hwsim_world_regdom_custom))
                        return -EINVAL;
-               }
 
                idx = array_index_nospec(idx,
                                         ARRAY_SIZE(hwsim_world_regdom_custom));
@@ -3358,7 +3347,6 @@ static int hwsim_new_radio_nl(struct sk_buff *msg, struct genl_info *info)
                        GENL_SET_ERR_MSG(info,"MAC is no valid source addr");
                        NL_SET_BAD_ATTR(info->extack,
                                        info->attrs[HWSIM_ATTR_PERM_ADDR]);
-                       kfree(hwname);
                        return -EINVAL;
                }
 
@@ -3366,6 +3354,15 @@ static int hwsim_new_radio_nl(struct sk_buff *msg, struct genl_info *info)
                param.perm_addr = nla_data(info->attrs[HWSIM_ATTR_PERM_ADDR]);
        }
 
+       if (info->attrs[HWSIM_ATTR_RADIO_NAME]) {
+               hwname = kasprintf(GFP_KERNEL, "%.*s",
+                                  nla_len(info->attrs[HWSIM_ATTR_RADIO_NAME]),
+                                  (char *)nla_data(info->attrs[HWSIM_ATTR_RADIO_NAME]));
+               if (!hwname)
+                       return -ENOMEM;
+               param.hwname = hwname;
+       }
+
        ret = mac80211_hwsim_new_radio(info, &param);
        kfree(hwname);
        return ret;