Eric Dumazet
8c12bd91b5
tcp: fix TCP_REPAIR_QUEUE bound checking
commit bf2acc943a upstream.
syzbot is able to produce a nasty WARN_ON() in tcp_verify_left_out()
with following C-repro :
socket(PF_INET, SOCK_STREAM, IPPROTO_IP) = 3
setsockopt(3, SOL_TCP, TCP_REPAIR, [1], 4) = 0
setsockopt(3, SOL_TCP, TCP_REPAIR_QUEUE, [-1], 4) = 0
bind(3, {sa_family=AF_INET, sin_port=htons(20002), sin_addr=inet_addr("0.0.0.0")}, 16) = 0
sendto(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"...,
1242, MSG_FASTOPEN, {sa_family=AF_INET, sin_port=htons(20002), sin_addr=inet_addr("127.0.0.1")}, 16) = 1242
setsockopt(3, SOL_TCP, TCP_REPAIR_WINDOW, "\4\0\0@+\205\0\0\377\377\0\0\377\377\377\177\0\0\0\0", 20) = 0
writev(3, [{"\270", 1}], 1) = 1
setsockopt(3, SOL_TCP, TCP_REPAIR_OPTIONS, "\10\0\0\0\0\0\0\0\0\0\0\0|\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 386) = 0
writev(3, [{"\210v\r[\226\320t\231qwQ\204\264l\254\t\1\20\245\214p\350H\223\254;\\\37\345\307p$"..., 3144}], 1) = 3144
The 3rd system call looks odd :
setsockopt(3, SOL_TCP, TCP_REPAIR_QUEUE, [-1], 4) = 0
This patch makes sure bound checking is using an unsigned compare.
Fixes: ee9952831c ("tcp: Initial repair mode")
Signed-off-by: Eric Dumazet <edumazet@google.com>
Reported-by: syzbot <syzkaller@googlegroups.com>
Cc: Pavel Emelyanov <xemul@parallels.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2018-05-16 10:10:24 +02:00
..
2018-04-26 11:02:21 +02:00
2017-12-17 15:07:58 +01:00
2017-06-23 14:17:31 -04:00
2018-04-12 12:32:22 +02:00
2017-10-21 01:33:19 +01:00
2018-01-02 20:31:06 +01:00
2018-02-25 11:07:46 +01:00
2017-09-01 17:42:05 -07:00
2018-01-02 20:31:09 +01:00
2017-11-02 11:10:55 +01:00
2017-11-02 11:10:55 +01:00
2017-08-03 15:35:59 -07:00
2018-04-12 12:32:27 +02:00
2017-08-23 20:37:10 -07:00
2017-08-01 16:09:14 -07:00
2017-10-08 10:12:15 -07:00
2017-12-20 10:10:37 +01:00
2018-02-13 10:19:47 +01:00
2018-02-13 10:19:48 +01:00
2017-09-01 18:38:09 -07:00
2018-03-31 18:10:40 +02:00
2017-10-22 02:03:51 +01:00
2018-05-16 10:10:24 +02:00
2018-05-16 10:10:24 +02:00
2017-11-02 11:10:55 +01:00
2017-11-02 11:10:55 +01:00
2018-03-24 11:01:27 +01:00
2017-10-01 03:55:47 +01:00
2017-11-02 11:10:55 +01:00
2017-08-22 14:27:18 -07:00
2018-03-31 18:10:41 +02:00
2017-06-25 11:42:01 -04:00
2018-05-09 09:51:48 +02:00
2018-05-09 09:51:48 +02:00
2017-11-02 11:10:55 +01:00
2017-10-27 23:43:31 +09:00
2017-08-09 16:57:38 -07:00
2017-10-12 22:57:11 -07:00
2017-11-02 11:10:55 +01:00
2017-07-01 07:39:08 -07:00
2017-08-30 11:20:09 -07:00
2017-08-07 11:39:22 -07:00
2018-01-02 20:31:08 +01:00
2018-05-16 10:10:24 +02:00
2017-10-21 01:33:19 +01:00
2017-11-02 11:10:55 +01:00
2018-02-13 10:19:48 +01:00
2017-08-06 21:25:10 -07:00
2017-08-06 21:25:10 -07:00
2017-09-01 17:42:05 -07:00
2017-08-06 21:25:10 -07:00
2017-09-01 18:38:09 -07:00
2017-11-02 11:10:55 +01:00
2017-08-06 21:25:10 -07:00
2017-08-06 21:25:10 -07:00
2017-08-06 21:25:10 -07:00
2018-04-29 11:33:11 +02:00
2018-01-02 20:31:07 +01:00
2017-11-02 11:10:55 +01:00
2017-12-17 15:07:57 +01:00
2018-04-26 11:02:13 +02:00
2018-01-31 14:03:47 +01:00
2018-03-08 22:41:13 -08:00
2017-07-24 17:28:12 -07:00
2018-01-02 20:31:09 +01:00
2017-11-02 11:10:55 +01:00
2017-08-06 21:25:10 -07:00
2018-03-31 18:10:38 +02:00
2017-08-14 22:17:05 -07:00
2017-12-25 14:26:30 +01:00
2017-11-02 11:10:55 +01:00
2017-08-06 21:25:10 -07:00
2017-08-30 11:20:08 -07:00
2017-08-06 21:25:10 -07:00
2018-05-16 10:10:24 +02:00
2017-08-07 11:39:22 -07:00
2017-11-02 11:10:55 +01:00
2018-01-31 14:03:47 +01:00
2017-07-24 13:52:59 -07:00
2018-03-08 22:41:10 -08:00
2018-03-03 10:24:25 +01:00
2017-11-02 11:10:55 +01:00
2017-11-02 11:10:55 +01:00