Patch "af_netlink: Fix shift out of bounds in group mask calculation" has been added to the 5.15-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    af_netlink: Fix shift out of bounds in group mask calculation

to the 5.15-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     af_netlink-fix-shift-out-of-bounds-in-group-mask-cal.patch
and it can be found in the queue-5.15 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 5a38b8bbc212011579b790dbccbf9bbb1683ce9d
Author: Petr Machata <petrm@xxxxxxxxxx>
Date:   Thu Mar 17 15:53:06 2022 +0100

    af_netlink: Fix shift out of bounds in group mask calculation
    
    [ Upstream commit 0caf6d9922192dd1afa8dc2131abfb4df1443b9f ]
    
    When a netlink message is received, netlink_recvmsg() fills in the address
    of the sender. One of the fields is the 32-bit bitfield nl_groups, which
    carries the multicast group on which the message was received. The least
    significant bit corresponds to group 1, and therefore the highest group
    that the field can represent is 32. Above that, the UB sanitizer flags the
    out-of-bounds shift attempts.
    
    Which bits end up being set in such case is implementation defined, but
    it's either going to be a wrong non-zero value, or zero, which is at least
    not misleading. Make the latter choice deterministic by always setting to 0
    for higher-numbered multicast groups.
    
    To get information about membership in groups >= 32, userspace is expected
    to use nl_pktinfo control messages[0], which are enabled by NETLINK_PKTINFO
    socket option.
    [0] https://lwn.net/Articles/147608/
    
    The way to trigger this issue is e.g. through monitoring the BRVLAN group:
    
            # bridge monitor vlan &
            # ip link add name br type bridge
    
    Which produces the following citation:
    
            UBSAN: shift-out-of-bounds in net/netlink/af_netlink.c:162:19
            shift exponent 32 is too large for 32-bit type 'int'
    
    Fixes: f7fa9b10edbb ("[NETLINK]: Support dynamic number of multicast groups per netlink family")
    Signed-off-by: Petr Machata <petrm@xxxxxxxxxx>
    Reviewed-by: Ido Schimmel <idosch@xxxxxxxxxx>
    Link: https://lore.kernel.org/r/2bef6aabf201d1fc16cca139a744700cff9dcb04.1647527635.git.petrm@xxxxxxxxxx
    Signed-off-by: Jakub Kicinski <kuba@xxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/net/netlink/af_netlink.c b/net/netlink/af_netlink.c
index 81ba8e51e01f..83ca93b32f5f 100644
--- a/net/netlink/af_netlink.c
+++ b/net/netlink/af_netlink.c
@@ -157,6 +157,8 @@ EXPORT_SYMBOL(do_trace_netlink_extack);
 
 static inline u32 netlink_group_mask(u32 group)
 {
+	if (group > 32)
+		return 0;
 	return group ? 1 << (group - 1) : 0;
 }
 



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux