In the Linux kernel, the following vulnerability has been resolved:
ipv6: addrlabel: fix infoleak when sending struct ifaddrlblmsg to network
When copying a struct ifaddrlblmsg
to the network, _ifalreserved
remained uninitialized, resulting in a 1-byte infoleak:
BUG: KMSAN: kernel-network-infoleak in _netdevstartxmit ./include/linux/netdevice.h:4841 _netdevstartxmit ./include/linux/netdevice.h:4841 netdevstartxmit ./include/linux/netdevice.h:4857 xmitone net/core/dev.c:3590 devhardstartxmit+0x1dc/0x800 net/core/dev.c:3606 _devqueuexmit+0x17e8/0x4350 net/core/dev.c:4256 devqueuexmit ./include/linux/netdevice.h:3009 _netlinkdelivertapskb net/netlink/afnetlink.c:307 _netlinkdelivertap+0x728/0xad0 net/netlink/afnetlink.c:325 netlinkdelivertap net/netlink/afnetlink.c:338 _netlinksendskb net/netlink/afnetlink.c:1263 netlinksendskb+0x1d9/0x200 net/netlink/afnetlink.c:1272 netlinkunicast+0x56d/0xf50 net/netlink/afnetlink.c:1360 nlmsgunicast ./include/net/netlink.h:1061 rtnlunicast+0x5a/0x80 net/core/rtnetlink.c:758 ip6addrlblget+0xfad/0x10f0 net/ipv6/addrlabel.c:628 rtnetlinkrcvmsg+0xb33/0x1570 net/core/rtnetlink.c:6082 ... Uninit was created at: slabpostallochook+0x118/0xb00 mm/slab.h:742 slaballocnode mm/slub.c:3398 _kmemcacheallocnode+0x4f2/0x930 mm/slub.c:3437 _dokmallocnode mm/slabcommon.c:954 _kmallocnodetrackcaller+0x117/0x3d0 mm/slabcommon.c:975 kmallocreserve net/core/skbuff.c:437 _allocskb+0x27a/0xab0 net/core/skbuff.c:509 allocskb ./include/linux/skbuff.h:1267 nlmsgnew ./include/net/netlink.h:964 ip6addrlblget+0x490/0x10f0 net/ipv6/addrlabel.c:608 rtnetlinkrcvmsg+0xb33/0x1570 net/core/rtnetlink.c:6082 netlinkrcvskb+0x299/0x550 net/netlink/afnetlink.c:2540 rtnetlinkrcv+0x26/0x30 net/core/rtnetlink.c:6109 netlinkunicastkernel net/netlink/afnetlink.c:1319 netlinkunicast+0x9ab/0xf50 net/netlink/afnetlink.c:1345 netlinksendmsg+0xebc/0x10f0 net/netlink/afnetlink.c:1921 ...
This patch ensures that the reserved field is always initialized.