Message ID | 20210811023654.2971-1-islituo@gmail.com (mailing list archive) |
---|---|
State | Awaiting Upstream |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | ieee802154: hwsim: fix possible null-pointer dereference in mac802154_hwsim.c | expand |
Context | Check | Description |
---|---|---|
netdev/cover_letter | success | Link |
netdev/fixes_present | success | Link |
netdev/patch_count | success | Link |
netdev/tree_selection | success | Guessed tree name to be net-next |
netdev/subject_prefix | warning | Target tree name not specified in the subject |
netdev/cc_maintainers | success | CCed 6 of 6 maintainers |
netdev/source_inline | success | Was 0 now: 0 |
netdev/verify_signedoff | success | Link |
netdev/module_param | success | Was 0 now: 0 |
netdev/build_32bit | success | Errors and warnings before: 0 this patch: 0 |
netdev/kdoc | success | Errors and warnings before: 0 this patch: 0 |
netdev/verify_fixes | success | Link |
netdev/checkpatch | success | total: 0 errors, 0 warnings, 0 checks, 24 lines checked |
netdev/build_allmodconfig_warn | success | Errors and warnings before: 0 this patch: 0 |
netdev/header_inline | success | Link |
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(-)