]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
net: nexthop: Initialize all fields in dumped nexthops
authorPetr Machata <petrm@nvidia.com>
Tue, 23 Jul 2024 16:04:16 +0000 (18:04 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 3 Aug 2024 07:01:03 +0000 (09:01 +0200)
[ Upstream commit 6d745cd0e9720282cd291d36b9db528aea18add2 ]

struct nexthop_grp contains two reserved fields that are not initialized by
nla_put_nh_group(), and carry garbage. This can be observed e.g. with
strace (edited for clarity):

    # ip nexthop add id 1 dev lo
    # ip nexthop add id 101 group 1
    # strace -e recvmsg ip nexthop get id 101
    ...
    recvmsg(... [{nla_len=12, nla_type=NHA_GROUP},
                 [{id=1, weight=0, resvd1=0x69, resvd2=0x67}]] ...) = 52

The fields are reserved and therefore not currently used. But as they are, they
leak kernel memory, and the fact they are not just zero complicates repurposing
of the fields for new ends. Initialize the full structure.

Fixes: 430a049190de ("nexthop: Add support for nexthop groups")
Signed-off-by: Petr Machata <petrm@nvidia.com>
Reviewed-by: Ido Schimmel <idosch@nvidia.com>
Reviewed-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <sashal@kernel.org>
net/ipv4/nexthop.c

index 535856b0f0edce6d8dae47126b42125c178df889..6b9787ee860175db7154c84164c7d2f5cc825055 100644 (file)
@@ -888,9 +888,10 @@ static int nla_put_nh_group(struct sk_buff *skb, struct nexthop *nh,
 
        p = nla_data(nla);
        for (i = 0; i < nhg->num_nh; ++i) {
-               p->id = nhg->nh_entries[i].nh->id;
-               p->weight = nhg->nh_entries[i].weight - 1;
-               p += 1;
+               *p++ = (struct nexthop_grp) {
+                       .id = nhg->nh_entries[i].nh->id,
+                       .weight = nhg->nh_entries[i].weight - 1,
+               };
        }
 
        if (nhg->resilient && nla_put_nh_group_res(skb, nhg))