]> git.baikalelectronics.ru Git - kernel.git/commit
seg6: fix seg6_validate_srh() to avoid slab-out-of-bounds
authorAhmed Abdelsalam <ahabdels@gmail.com>
Wed, 3 Jun 2020 06:54:42 +0000 (06:54 +0000)
committerDavid S. Miller <davem@davemloft.net>
Thu, 4 Jun 2020 22:39:32 +0000 (15:39 -0700)
commit6a7bf091bbf6558e0300dc6e877adf41a5c05463
tree7c934d9862326e15c9ba585ff6beceb6d3998c27
parent26cbd04a6dfc8bd6b7f75687533c473f3d094bf2
seg6: fix seg6_validate_srh() to avoid slab-out-of-bounds

The seg6_validate_srh() is used to validate SRH for three cases:

case1: SRH of data-plane SRv6 packets to be processed by the Linux kernel.
Case2: SRH of the netlink message received  from user-space (iproute2)
Case3: SRH injected into packets through setsockopt

In case1, the SRH can be encoded in the Reduced way (i.e., first SID is
carried in DA only and not represented as SID in the SRH) and the
seg6_validate_srh() now handles this case correctly.

In case2 and case3, the SRH shouldn’t be encoded in the Reduced way
otherwise we lose the first segment (i.e., the first hop).

The current implementation of the seg6_validate_srh() allow SRH of case2
and case3 to be encoded in the Reduced way. This leads a slab-out-of-bounds
problem.

This patch verifies SRH of case1, case2 and case3. Allowing case1 to be
reduced while preventing SRH of case2 and case3 from being reduced .

Reported-by: syzbot+e8c028b62439eac42073@syzkaller.appspotmail.com
Reported-by: YueHaibing <yuehaibing@huawei.com>
Fixes: 188e0c69f2bf ("seg6: fix SRH processing to comply with RFC8754")
Signed-off-by: Ahmed Abdelsalam <ahabdels@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/net/seg6.h
net/core/filter.c
net/ipv6/ipv6_sockglue.c
net/ipv6/seg6.c
net/ipv6/seg6_iptunnel.c
net/ipv6/seg6_local.c