RE: [patch net-next v4 8/9] devlink: add a command to set notification filter and use it for multicasts

Keller, Jacob E
2023-12-04T19:17:49Z

> -----Original Message-----
> From: Jiri Pirko <jiri@resnulli.us>
> Sent: Monday, December 4, 2023 8:25 AM
> To: Kitszel, Przemyslaw <przemyslaw.kitszel@intel.com>
> Cc: kuba@kernel.org; pabeni@redhat.com; davem@davemloft.net;
> edumazet@google.com; Keller, Jacob E <jacob.e.keller@intel.com>; Hadi Salim,
> Jamal <jhs@mojatatu.com>; johannes@sipsolutions.net;
> andriy.shevchenko@linux.intel.com; Nambiar, Amritha
> <amritha.nambiar@intel.com>; sdf@google.com; horms@kernel.org;
> netdev@vger.kernel.org
> Subject: Re: [patch net-next v4 8/9] devlink: add a command to set notification
> filter and use it for multicasts
>
> Mon, Nov 27, 2023 at 04:40:22PM CET, przemyslaw.kitszel@intel.com wrote:
> >On 11/23/23 19:15, Jiri Pirko wrote:
> >> From: Jiri Pirko <jiri@nvidia.com>
> >>
>
> [...]
>
>
> >> diff --git a/net/devlink/netlink.c b/net/devlink/netlink.c
> >> index fa9afe3e6d9b..33a8e51dea68 100644
> >> --- a/net/devlink/netlink.c
> >> +++ b/net/devlink/netlink.c
> >> @@ -17,6 +17,79 @@ static const struct genl_multicast_group
> devlink_nl_mcgrps[] = {
> >> [DEVLINK_MCGRP_CONFIG] = { .name =
> DEVLINK_GENL_MCGRP_CONFIG_NAME },
> >> };
> >> +int devlink_nl_notify_filter_set_doit(struct sk_buff *skb,
> >> + struct genl_info *info)
> >> +{
> >> + struct nlattr **attrs = info->attrs;
> >> + struct devlink_obj_desc *flt;
> >> + size_t data_offset = 0;
> >> + size_t data_size = 0;
> >> + char *pos;
> >> +
> >> + if (attrs[DEVLINK_ATTR_BUS_NAME])
> >> + data_size += nla_len(attrs[DEVLINK_ATTR_BUS_NAME]) + 1;
> >> + if (attrs[DEVLINK_ATTR_DEV_NAME])
> >> + data_size += nla_len(attrs[DEVLINK_ATTR_DEV_NAME]) + 1;
> >> +
> >> + flt = kzalloc(sizeof(*flt) + data_size, GFP_KERNEL);
> >
> >instead of arithmetic here, you could use struct_size()
>
> That is used for flex array, yet I have no flex array here.
>

Yea this isn't a flexible array. You could use size_add to ensure that this can't overflow. I don't know what the bound on the attribute sizes is.