Commit a348e9e5 authored by Petr Machata's avatar Petr Machata Committed by Zhengchao Shao
Browse files

net: nexthop: Initialize all fields in dumped nexthops

stable inclusion
from stable-v5.10.224
commit 5cc4d71dda2dd4f1520f40e634a527022e48ccd8
category: bugfix
bugzilla: https://gitee.com/src-openeuler/kernel/issues/IAKPWF
CVE: CVE-2024-42283

Reference: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=5cc4d71dda2dd4f1520f40e634a527022e48ccd8



---------------------------

[ 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: 430a0491 ("nexthop: Add support for nexthop groups")
Signed-off-by: default avatarPetr Machata <petrm@nvidia.com>
Reviewed-by: default avatarIdo Schimmel <idosch@nvidia.com>
Reviewed-by: default avatarEric Dumazet <edumazet@google.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
Signed-off-by: default avatarZhengchao Shao <shaozhengchao@huawei.com>
parent 10361bdc
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
@@ -210,9 +210,10 @@ static int nla_put_nh_group(struct sk_buff *skb, struct nh_group *nhg)

	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,
		};
	}

	return 0;