lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Fri, 22 Mar 2019 12:14:21 +0100 From: Greg Kroah-Hartman <gregkh@...uxfoundation.org> To: linux-kernel@...r.kernel.org Cc: Greg Kroah-Hartman <gregkh@...uxfoundation.org>, stable@...r.kernel.org, Baozeng Ding <sploving1@...il.com>, Jozsef Kadlecsik <kadlec@...ckhole.kfki.hu>, Pablo Neira Ayuso <pablo@...filter.org>, Zubin Mithra <zsm@...omium.org> Subject: [PATCH 4.4 123/230] netfilter: nf_conntrack_tcp: Fix stack out of bounds when parsing TCP options 4.4-stable review patch. If anyone has any objections, please let me know. ------------------ From: Jozsef Kadlecsik <kadlec@...ckhole.kfki.hu> commit 644c7e48cb59cfc6988ddc7bf3d3b1ba5fe7fa9d upstream. 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@...il.com> Tested-by: Baozeng Ding <sploving1@...il.com> Signed-off-by: Jozsef Kadlecsik <kadlec@...ckhole.kfki.hu> Signed-off-by: Pablo Neira Ayuso <pablo@...filter.org> Cc: Zubin Mithra <zsm@...omium.org> Signed-off-by: Greg Kroah-Hartman <gregkh@...uxfoundation.org> --- net/netfilter/nf_conntrack_proto_tcp.c | 4 ++++ 1 file changed, 4 insertions(+) --- 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_ 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_buf length--; continue; default: + if (length < 2) + return; opsize = *ptr++; if (opsize < 2) /* "silly options" */ return;
Powered by blists - more mailing lists