Skip to content

Commit

Permalink
nl80211: Check that function pointer != NULL before using it
Browse files Browse the repository at this point in the history
NL80211_CMD_GET_MESH_PARAMS and NL80211_CMD_SET_MESH_PARAMS handlers
did not verify whether a function pointer is NULL (not supported by
the driver) before trying to call the function. The former nl80211
command is available for unprivileged users, too, so this can
potentially allow normal users to kill networking (or worse..) if
mac80211 is built without CONFIG_MAC80211_MESH=y.

Signed-off-by: Jouni Malinen <jouni.malinen@atheros.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
  • Loading branch information
Jouni Malinen authored and linvjw committed Mar 20, 2009
1 parent 170ebf8 commit f3f9258
Showing 1 changed file with 11 additions and 0 deletions.
11 changes: 11 additions & 0 deletions net/wireless/nl80211.c
Expand Up @@ -1908,6 +1908,11 @@ static int nl80211_get_mesh_params(struct sk_buff *skb,
if (err)
return err;

if (!drv->ops->get_mesh_params) {
err = -EOPNOTSUPP;
goto out;
}

/* Get the mesh params */
rtnl_lock();
err = drv->ops->get_mesh_params(&drv->wiphy, dev, &cur_params);
Expand Down Expand Up @@ -2017,6 +2022,11 @@ static int nl80211_set_mesh_params(struct sk_buff *skb, struct genl_info *info)
if (err)
return err;

if (!drv->ops->set_mesh_params) {
err = -EOPNOTSUPP;
goto out;
}

/* This makes sure that there aren't more than 32 mesh config
* parameters (otherwise our bitfield scheme would not work.) */
BUILD_BUG_ON(NL80211_MESHCONF_ATTR_MAX > 32);
Expand Down Expand Up @@ -2061,6 +2071,7 @@ static int nl80211_set_mesh_params(struct sk_buff *skb, struct genl_info *info)
err = drv->ops->set_mesh_params(&drv->wiphy, dev, &cfg, mask);
rtnl_unlock();

out:
/* cleanup */
cfg80211_put_dev(drv);
dev_put(dev);
Expand Down

0 comments on commit f3f9258

Please sign in to comment.