projects
/
openwrt
/
staging
/
blogic.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
| inline |
side by side
(parent:
86df4d2
)
tcp: fix hang in tcp_sendpage_locked()
author
Eric Dumazet
<
[email protected]
>
Fri, 25 Aug 2017 13:27:05 +0000
(06:27 -0700)
committer
David S. Miller
<
[email protected]
>
Sat, 26 Aug 2017 00:22:01 +0000
(17:22 -0700)
syszkaller got a hang in tcp stack, related to a bug in
tcp_sendpage_locked()
root@syzkaller:~# cat /proc/3059/stack
[<
ffffffff83de926c
>] __lock_sock+0x1dc/0x2f0
[<
ffffffff83de9473
>] lock_sock_nested+0xf3/0x110
[<
ffffffff8408ce01
>] tcp_sendmsg+0x21/0x50
[<
ffffffff84163b6f
>] inet_sendmsg+0x11f/0x5e0
[<
ffffffff83dd8eea
>] sock_sendmsg+0xca/0x110
[<
ffffffff83dd9547
>] kernel_sendmsg+0x47/0x60
[<
ffffffff83de35dc
>] sock_no_sendpage+0x1cc/0x280
[<
ffffffff8408916b
>] tcp_sendpage_locked+0x10b/0x160
[<
ffffffff84089203
>] tcp_sendpage+0x43/0x60
[<
ffffffff841641da
>] inet_sendpage+0x1aa/0x660
[<
ffffffff83dd4fcd
>] kernel_sendpage+0x8d/0xe0
[<
ffffffff83dd50ac
>] sock_sendpage+0x8c/0xc0
[<
ffffffff81b63300
>] pipe_to_sendpage+0x290/0x3b0
[<
ffffffff81b67243
>] __splice_from_pipe+0x343/0x750
[<
ffffffff81b6a459
>] splice_from_pipe+0x1e9/0x330
[<
ffffffff81b6a5e0
>] generic_splice_sendpage+0x40/0x50
[<
ffffffff81b6b1d7
>] SyS_splice+0x7b7/0x1610
[<
ffffffff84d77a01
>] entry_SYSCALL_64_fastpath+0x1f/0xbe
Fixes: 306b13eb3cf9 ("proto_ops: Add locked held versions of sendmsg and sendpage")
Signed-off-by: Eric Dumazet <
[email protected]
>
Reported-by: Dmitry Vyukov <
[email protected]
>
Cc: Tom Herbert <
[email protected]
>
Signed-off-by: David S. Miller <
[email protected]
>
net/ipv4/tcp.c
patch
|
blob
|
history
diff --git
a/net/ipv4/tcp.c
b/net/ipv4/tcp.c
index 0cce4472b4a1b0e3c110692571ac2a5c51467c42..566083ee2654c25410d80ff56ce5adb49bb28ae7 100644
(file)
--- a/
net/ipv4/tcp.c
+++ b/
net/ipv4/tcp.c
@@
-1052,8
+1052,7
@@
int tcp_sendpage_locked(struct sock *sk, struct page *page, int offset,
{
if (!(sk->sk_route_caps & NETIF_F_SG) ||
!sk_check_csum_caps(sk))
- return sock_no_sendpage(sk->sk_socket, page, offset, size,
- flags);
+ return sock_no_sendpage_locked(sk, page, offset, size, flags);
tcp_rate_check_app_limited(sk); /* is sending application-limited? */