ipv6: fix out-of-bound access in ip6_parse_tlv()
authorEric Dumazet <edumazet@google.com>
Thu, 24 Jun 2021 10:07:20 +0000 (03:07 -0700)
committerDavid S. Miller <davem@davemloft.net>
Thu, 24 Jun 2021 19:42:57 +0000 (12:42 -0700)
commit624085a31c1ad6a80b1e53f686bf6ee92abbf6e8
treeb03f714aab2751866be7f7eac9e853a284a559ca
parentd9b6d26f6569d3ff748f6ba7a9ea3929abe5a17e
ipv6: fix out-of-bound access in ip6_parse_tlv()

First problem is that optlen is fetched without checking
there is more than one byte to parse.

Fix this by taking care of IPV6_TLV_PAD1 before
fetching optlen (under appropriate sanity checks against len)

Second problem is that IPV6_TLV_PADN checks of zero
padding are performed before the check of remaining length.

Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
Fixes: c1412fce7ecc ("net/ipv6/exthdrs.c: Strict PadN option checking")
Signed-off-by: Eric Dumazet <edumazet@google.com>
Cc: Paolo Abeni <pabeni@redhat.com>
Cc: Tom Herbert <tom@herbertland.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv6/exthdrs.c