* [PATCH net] net: mpls: initialize rtm_tos in mpls_getroute()
@ 2026-07-23 1:08 Yehyeong Lee
2026-07-28 9:20 ` patchwork-bot+netdevbpf
0 siblings, 1 reply; 2+ messages in thread
From: Yehyeong Lee @ 2026-07-23 1:08 UTC (permalink / raw)
To: Jakub Kicinski, Paolo Abeni, Eric Dumazet, David S . Miller
Cc: Roopa Prabhu, Simon Horman, netdev, linux-kernel, Yehyeong Lee
mpls_getroute() builds the RTM_NEWROUTE reply to an RTM_GETROUTE
request by filling a struct rtmsg allocated from an skb whose data
area is not zeroed (alloc_skb(NLMSG_GOODSIZE, ...)). It sets every
field of the header except rtm_tos:
r = nlmsg_data(nlh);
r->rtm_family = AF_MPLS;
r->rtm_dst_len = 20;
r->rtm_src_len = 0;
r->rtm_table = RT_TABLE_MAIN;
r->rtm_type = RTN_UNICAST;
r->rtm_scope = RT_SCOPE_UNIVERSE;
r->rtm_protocol = rt->rt_protocol;
r->rtm_flags = 0;
struct rtmsg has no padding, so the one uninitialised byte rtm_tos
(offset 3) is copied straight to user space on recvmsg(), leaking a
byte of uninitialised heap memory. This is in contrast to
mpls_dump_route(), which fills the very same header and does set
rtm_tos = 0.
Initialize rtm_tos to 0, matching mpls_dump_route().
Reproduced with KMSAN by adding an MPLS route and issuing a
non-RTM_F_FIB_MATCH RTM_GETROUTE for its label:
BUG: KMSAN: kernel-infoleak in _copy_to_iter+0x36c/0x33f0
_copy_to_iter+0x36c/0x33f0
__skb_datagram_iter+0x196/0x12c0
skb_copy_datagram_iter+0x5b/0x210
netlink_recvmsg+0x37b/0xef0
...
Uninit was created at:
__alloc_skb+0x8ca/0x10e0
mpls_getroute+0x1280/0x3a40
rtnetlink_rcv_msg+0x1138/0x15a0
...
Byte 19 of 64 is uninitialized
(byte 19 = nlmsghdr(16) + rtmsg offset 3 = rtm_tos)
Fixes: 397fc9e5cefe ("mpls: route get support")
Signed-off-by: Yehyeong Lee <yhlee@isslab.korea.ac.kr>
---
net/mpls/af_mpls.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/net/mpls/af_mpls.c b/net/mpls/af_mpls.c
index 318cb7e2ac5f..f1c9fc8504e1 100644
--- a/net/mpls/af_mpls.c
+++ b/net/mpls/af_mpls.c
@@ -2537,6 +2537,7 @@ static int mpls_getroute(struct sk_buff *in_skb, struct nlmsghdr *in_nlh,
r->rtm_family = AF_MPLS;
r->rtm_dst_len = 20;
r->rtm_src_len = 0;
+ r->rtm_tos = 0;
r->rtm_table = RT_TABLE_MAIN;
r->rtm_type = RTN_UNICAST;
r->rtm_scope = RT_SCOPE_UNIVERSE;
--
2.43.0
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH net] net: mpls: initialize rtm_tos in mpls_getroute()
2026-07-23 1:08 [PATCH net] net: mpls: initialize rtm_tos in mpls_getroute() Yehyeong Lee
@ 2026-07-28 9:20 ` patchwork-bot+netdevbpf
0 siblings, 0 replies; 2+ messages in thread
From: patchwork-bot+netdevbpf @ 2026-07-28 9:20 UTC (permalink / raw)
To: Yehyeong Lee
Cc: kuba, pabeni, edumazet, davem, roopa, horms, netdev, linux-kernel
Hello:
This patch was applied to netdev/net.git (main)
by Paolo Abeni <pabeni@redhat.com>:
On Thu, 23 Jul 2026 10:08:29 +0900 you wrote:
> mpls_getroute() builds the RTM_NEWROUTE reply to an RTM_GETROUTE
> request by filling a struct rtmsg allocated from an skb whose data
> area is not zeroed (alloc_skb(NLMSG_GOODSIZE, ...)). It sets every
> field of the header except rtm_tos:
>
> r = nlmsg_data(nlh);
> r->rtm_family = AF_MPLS;
> r->rtm_dst_len = 20;
> r->rtm_src_len = 0;
> r->rtm_table = RT_TABLE_MAIN;
> r->rtm_type = RTN_UNICAST;
> r->rtm_scope = RT_SCOPE_UNIVERSE;
> r->rtm_protocol = rt->rt_protocol;
> r->rtm_flags = 0;
>
> [...]
Here is the summary with links:
- [net] net: mpls: initialize rtm_tos in mpls_getroute()
https://git.kernel.org/netdev/net/c/295dd295e213
You are awesome, thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2026-07-28 9:20 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-07-23 1:08 [PATCH net] net: mpls: initialize rtm_tos in mpls_getroute() Yehyeong Lee
2026-07-28 9:20 ` patchwork-bot+netdevbpf
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox