diff options
author | Jozsef Kadlecsik <kadlec@blackhole.kfki.hu> | 2016-03-30 11:34:35 +0200 |
---|---|---|
committer | Pablo Neira Ayuso <pablo@netfilter.org> | 2016-04-07 18:42:37 +0200 |
commit | 644c7e48cb59cfc6988ddc7bf3d3b1ba5fe7fa9d (patch) | |
tree | cb2ca7427bab0e28fe097ae6a08acd416c63eccd /net | |
parent | ff76def3bd7e816fe0ca7f0840065c566a42ba2f (diff) | |
download | linux-644c7e48cb59cfc6988ddc7bf3d3b1ba5fe7fa9d.tar.gz linux-644c7e48cb59cfc6988ddc7bf3d3b1ba5fe7fa9d.tar.bz2 linux-644c7e48cb59cfc6988ddc7bf3d3b1ba5fe7fa9d.zip |
netfilter: nf_conntrack_tcp: Fix stack out of bounds when parsing TCP options
Baozeng Ding reported a KASAN stack out of bounds issue - it uncovered that
the TCP option parsing routines in netfilter TCP connection tracking could
read one byte out of the buffer of the TCP options. Therefore in the patch
we check that the available data length is large enough to parse both TCP
option code and size.
Reported-by: Baozeng Ding <sploving1@gmail.com>
Tested-by: Baozeng Ding <sploving1@gmail.com>
Signed-off-by: Jozsef Kadlecsik <kadlec@blackhole.kfki.hu>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Diffstat (limited to 'net')
-rw-r--r-- | net/netfilter/nf_conntrack_proto_tcp.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/net/netfilter/nf_conntrack_proto_tcp.c b/net/netfilter/nf_conntrack_proto_tcp.c index 278f3b9356ef..7cc1d9c22a9f 100644 --- a/net/netfilter/nf_conntrack_proto_tcp.c +++ b/net/netfilter/nf_conntrack_proto_tcp.c @@ -410,6 +410,8 @@ static void tcp_options(const struct sk_buff *skb, length--; continue; default: + if (length < 2) + return; opsize=*ptr++; if (opsize < 2) /* "silly options" */ return; @@ -470,6 +472,8 @@ static void tcp_sack(const struct sk_buff *skb, unsigned int dataoff, length--; continue; default: + if (length < 2) + return; opsize = *ptr++; if (opsize < 2) /* "silly options" */ return; |