Message ID | 20210811023654.2971-1-islituo@gmail.com (mailing list archive) |
---|---|
State | Rejected |
Headers | show |
Series | ieee802154: hwsim: fix possible null-pointer dereference in mac802154_hwsim.c | expand |
Hello. On 11.08.21 04:36, Tuo Li wrote: > In hwsim_new_edge_nl() and hwsim_set_edge_lqi(), if only one of the two > info->attrs is NULL, the functions will not return. > if (!info->attrs[MAC802154_HWSIM_ATTR_RADIO_ID] && > !info->attrs[MAC802154_HWSIM_ATTR_RADIO_EDGE]) > return -EINVAL; > > However, both of them may be dereferenced in the function > nla_parse_nested_deprecated(), causing a null-pointer dereference. > To fix this possible null-pointer dereference, the function returns > -EINVAL if any info_attr is NULL. > > Similarly, in hwsim_set_edge_lqi(), if only one of the two edge_attrs is > NULL, both nla_get_u32() and nla_get_u8() will be called, causing a > null-pointer dereference. > Also, to fix this possible null-pointer dereference, the function returns > -EINVAL if any edge_attr is NULL. > > Fixes: f25da51fdc38 ("ieee802154: hwsim: add replacement for fakelb") > Reported-by: TOTE Robot <oslab@tsinghua.edu.cn> > Signed-off-by: Tuo Li <islituo@gmail.com> Thanks for your patch. This has already been fixed with patches in the wpan tree. https://git.kernel.org/pub/scm/linux/kernel/git/sschmidt/wpan.git/ I just sent a pull request including them to get pulled into net. regards Stefan Schmidt
diff --git a/drivers/net/ieee802154/mac802154_hwsim.c b/drivers/net/ieee802154/mac802154_hwsim.c index ebc976b7fcc2..8caa61ec718f 100644 --- a/drivers/net/ieee802154/mac802154_hwsim.c +++ b/drivers/net/ieee802154/mac802154_hwsim.c @@ -418,7 +418,7 @@ static int hwsim_new_edge_nl(struct sk_buff *msg, struct genl_info *info) struct hwsim_edge *e; u32 v0, v1; - if (!info->attrs[MAC802154_HWSIM_ATTR_RADIO_ID] && + if (!info->attrs[MAC802154_HWSIM_ATTR_RADIO_ID] || !info->attrs[MAC802154_HWSIM_ATTR_RADIO_EDGE]) return -EINVAL; @@ -528,14 +528,14 @@ static int hwsim_set_edge_lqi(struct sk_buff *msg, struct genl_info *info) u32 v0, v1; u8 lqi; - if (!info->attrs[MAC802154_HWSIM_ATTR_RADIO_ID] && + if (!info->attrs[MAC802154_HWSIM_ATTR_RADIO_ID] || !info->attrs[MAC802154_HWSIM_ATTR_RADIO_EDGE]) return -EINVAL; if (nla_parse_nested_deprecated(edge_attrs, MAC802154_HWSIM_EDGE_ATTR_MAX, info->attrs[MAC802154_HWSIM_ATTR_RADIO_EDGE], hwsim_edge_policy, NULL)) return -EINVAL; - if (!edge_attrs[MAC802154_HWSIM_EDGE_ATTR_ENDPOINT_ID] && + if (!edge_attrs[MAC802154_HWSIM_EDGE_ATTR_ENDPOINT_ID] || !edge_attrs[MAC802154_HWSIM_EDGE_ATTR_LQI]) return -EINVAL;
In hwsim_new_edge_nl() and hwsim_set_edge_lqi(), if only one of the two info->attrs is NULL, the functions will not return. if (!info->attrs[MAC802154_HWSIM_ATTR_RADIO_ID] && !info->attrs[MAC802154_HWSIM_ATTR_RADIO_EDGE]) return -EINVAL; However, both of them may be dereferenced in the function nla_parse_nested_deprecated(), causing a null-pointer dereference. To fix this possible null-pointer dereference, the function returns -EINVAL if any info_attr is NULL. Similarly, in hwsim_set_edge_lqi(), if only one of the two edge_attrs is NULL, both nla_get_u32() and nla_get_u8() will be called, causing a null-pointer dereference. Also, to fix this possible null-pointer dereference, the function returns -EINVAL if any edge_attr is NULL. Fixes: f25da51fdc38 ("ieee802154: hwsim: add replacement for fakelb") Reported-by: TOTE Robot <oslab@tsinghua.edu.cn> Signed-off-by: Tuo Li <islituo@gmail.com> --- drivers/net/ieee802154/mac802154_hwsim.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)