Eric Dumazet
8ce48623f0
ipv6: tcp: restore IP6CB for pktoptions skbs
...
Baozeng Ding reported following KASAN splat :
BUG: KASAN: use-after-free in ip6_datagram_recv_specific_ctl+0x13f1/0x15c0 at addr ffff880029c84ec8
Read of size 1 by task poc/25548
Call Trace:
[<ffffffff82cf43c9>] dump_stack+0x12e/0x185 /lib/dump_stack.c:15
[< inline >] print_address_description /mm/kasan/report.c:204
[<ffffffff817ced3b>] kasan_report_error+0x48b/0x4b0 /mm/kasan/report.c:283
[< inline >] kasan_report /mm/kasan/report.c:303
[<ffffffff817ced9e>] __asan_report_load1_noabort+0x3e/0x40 /mm/kasan/report.c:321
[<ffffffff85c71da1>] ip6_datagram_recv_specific_ctl+0x13f1/0x15c0 /net/ipv6/datagram.c:687
[<ffffffff85c734c3>] ip6_datagram_recv_ctl+0x33/0x40
[<ffffffff85c0b07c>] do_ipv6_getsockopt.isra.4+0xaec/0x2150
[<ffffffff85c0c7f6>] ipv6_getsockopt+0x116/0x230
[<ffffffff859b5a12>] tcp_getsockopt+0x82/0xd0 /net/ipv4/tcp.c:3035
[<ffffffff855fb385>] sock_common_getsockopt+0x95/0xd0 /net/core/sock.c:2647
[< inline >] SYSC_getsockopt /net/socket.c:1776
[<ffffffff855f8ba2>] SyS_getsockopt+0x142/0x230 /net/socket.c:1758
[<ffffffff8685cdc5>] entry_SYSCALL_64_fastpath+0x23/0xc6
Memory state around the buggy address:
ffff880029c84d80: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ffff880029c84e00: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
> ffff880029c84e80: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
^
ffff880029c84f00: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ffff880029c84f80: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
He also provided a syzkaller reproducer.
Issue is that ip6_datagram_recv_specific_ctl() expects to find IP6CB
data that was moved at a different place in tcp_v6_rcv()
This patch moves tcp_v6_restore_cb() up and calls it from
tcp_v6_do_rcv() when np->pktoptions is set.
Fixes: 971f10eca186 ("tcp: better TCP_SKB_CB layout to reduce cache line misses")
Signed-off-by: Eric Dumazet <edumazet@google.com>
Reported-by: Baozeng Ding <sploving1@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2016-10-13 11:07:34 -04:00
..
2016-09-01 14:09:01 -07:00
2016-09-25 23:34:19 +02:00
2015-07-31 15:21:30 -07:00
2016-10-07 23:43:56 -04:00
2015-12-22 15:57:54 -05:00
2016-08-28 23:32:41 -04:00
2015-08-25 13:37:31 -07:00
2015-03-31 13:51:54 -04:00
2016-08-13 14:56:17 -07:00
2016-05-16 13:46:23 -04:00
2015-05-28 11:23:20 +08:00
2016-06-27 15:06:15 -04:00
2015-09-02 15:31:00 -07:00
2016-07-07 10:15:34 +10:00
2016-09-10 23:12:51 -07:00
2016-05-29 22:24:21 -07:00
2016-06-30 05:03:36 -04:00
2016-02-11 03:54:15 -05:00
2016-04-27 22:48:24 -04:00
2016-06-14 15:26:42 -04:00
2016-09-09 16:50:23 -07:00
2016-05-03 16:08:14 -04:00
2016-10-02 22:20:41 -04:00
2016-06-18 22:11:38 -07:00
2016-06-08 00:25:38 -07:00
2016-09-19 20:59:34 -04:00
2016-04-07 16:53:29 -04:00
2016-09-10 23:12:53 -07:00
2016-09-17 10:13:07 -04:00
2016-03-11 15:14:26 -05:00
2016-09-23 06:46:57 -04:00
2016-09-25 23:41:39 -04:00
2014-08-24 22:37:52 -07:00
2016-07-07 10:15:34 +10:00
2016-05-31 14:07:49 -07:00
2016-07-07 10:15:34 +10:00
2015-08-13 17:08:39 -07:00
2016-08-08 16:04:39 -07:00
2015-10-05 03:16:47 -07:00
2016-09-10 23:12:52 -07:00
2015-09-29 20:21:32 +02:00
2016-09-10 23:12:52 -07:00
2016-09-06 12:54:17 -07:00
2016-09-30 01:50:44 -04:00
2014-09-19 17:15:31 -04:00
2016-09-10 23:12:52 -07:00
2016-04-27 22:48:24 -04:00
2016-10-02 22:20:41 -04:00
2016-08-12 21:52:18 -07:00
2016-04-27 22:48:24 -04:00
2016-06-27 15:06:17 -04:00
2016-10-13 11:07:34 -04:00
2015-02-28 16:56:51 -05:00
2015-11-03 10:52:13 -05:00
2016-08-23 23:23:50 -07:00
2016-05-20 18:03:15 -04:00
2016-08-30 00:54:02 -04:00
2016-08-30 00:54:02 -04:00
2016-09-21 10:09:14 +02:00
2015-03-31 13:58:35 -04:00
2016-01-15 15:07:23 -05:00
2015-10-24 06:54:12 -07:00
2016-09-12 15:52:44 -07:00
2014-08-24 22:37:52 -07:00
2016-09-21 10:09:14 +02:00