On 8/26/20 10:48 AM, Ido Schimmel wrote:
> From: Ido Schimmel <ido...@nvidia.com>
> 
> The struct looks as follows:
> 
> struct nh_group {
>       struct nh_group         *spare; /* spare group for removals */
>       u16                     num_nh;
>       bool                    mpath;
>       bool                    fdb_nh;
>       bool                    has_v4;
>       struct nh_grp_entry     nh_entries[];
> };
> 
> But its offset within 'struct nexthop' is also taken into account to
> determine the allocation size.

must be a leftover from initial versions. Thanks for catching this.

> 
> Instead, use struct_size() to allocate only the required number of
> bytes.
> 
> Signed-off-by: Ido Schimmel <ido...@nvidia.com>
> ---
>  net/ipv4/nexthop.c | 5 +----
>  1 file changed, 1 insertion(+), 4 deletions(-)
> 
> diff --git a/net/ipv4/nexthop.c b/net/ipv4/nexthop.c
> index 134e92382275..d13730ff9aeb 100644
> --- a/net/ipv4/nexthop.c
> +++ b/net/ipv4/nexthop.c
> @@ -133,12 +133,9 @@ static struct nexthop *nexthop_alloc(void)
>  
>  static struct nh_group *nexthop_grp_alloc(u16 num_nh)
>  {
> -     size_t sz = offsetof(struct nexthop, nh_grp)
> -                 + sizeof(struct nh_group)
> -                 + sizeof(struct nh_grp_entry) * num_nh;
>       struct nh_group *nhg;
>  
> -     nhg = kzalloc(sz, GFP_KERNEL);
> +     nhg = kzalloc(struct_size(nhg, nh_entries, num_nh), GFP_KERNEL);
>       if (nhg)
>               nhg->num_nh = num_nh;
>  
> 

Reviewed-by: David Ahern <dsah...@gmail.com>

Reply via email to