Eric Dumazet
c3f24cfb3e
dccp: do not release listeners too soon
Andrey Konovalov reported following error while fuzzing with syzkaller :
IPv4: Attempt to release alive inet socket ffff880068e98940
kasan: CONFIG_KASAN_INLINE enabled
kasan: GPF could be caused by NULL-ptr deref or user memory access
general protection fault: 0000 [#1] SMP KASAN
Modules linked in:
CPU: 1 PID: 3905 Comm: a.out Not tainted 4.9.0-rc3+ #333
Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS Bochs 01/01/2011
task: ffff88006b9e0000 task.stack: ffff880068770000
RIP: 0010:[<ffffffff819ead5f>] [<ffffffff819ead5f>]
selinux_socket_sock_rcv_skb+0xff/0x6a0 security/selinux/hooks.c:4639
RSP: 0018:ffff8800687771c8 EFLAGS: 00010202
RAX: ffff88006b9e0000 RBX: 1ffff1000d0eee3f RCX: 1ffff1000d1d312a
RDX: 1ffff1000d1d31a6 RSI: dffffc0000000000 RDI: 0000000000000010
RBP: ffff880068777360 R08: 0000000000000000 R09: 0000000000000002
R10: dffffc0000000000 R11: 0000000000000006 R12: ffff880068e98940
R13: 0000000000000002 R14: ffff880068777338 R15: 0000000000000000
FS: 00007f00ff760700(0000) GS:ffff88006cd00000(0000) knlGS:0000000000000000
CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 0000000020008000 CR3: 000000006a308000 CR4: 00000000000006e0
Stack:
ffff8800687771e0 ffffffff812508a5 ffff8800686f3168 0000000000000007
ffff88006ac8cdfc ffff8800665ea500 0000000041b58ab3 ffffffff847b5480
ffffffff819eac60 ffff88006b9e0860 ffff88006b9e0868 ffff88006b9e07f0
Call Trace:
[<ffffffff819c8dd5>] security_sock_rcv_skb+0x75/0xb0 security/security.c:1317
[<ffffffff82c2a9e7>] sk_filter_trim_cap+0x67/0x10e0 net/core/filter.c:81
[<ffffffff82b81e60>] __sk_receive_skb+0x30/0xa00 net/core/sock.c:460
[<ffffffff838bbf12>] dccp_v4_rcv+0xdb2/0x1910 net/dccp/ipv4.c:873
[<ffffffff83069d22>] ip_local_deliver_finish+0x332/0xad0
net/ipv4/ip_input.c:216
[< inline >] NF_HOOK_THRESH ./include/linux/netfilter.h:232
[< inline >] NF_HOOK ./include/linux/netfilter.h:255
[<ffffffff8306abd2>] ip_local_deliver+0x1c2/0x4b0 net/ipv4/ip_input.c:257
[< inline >] dst_input ./include/net/dst.h:507
[<ffffffff83068500>] ip_rcv_finish+0x750/0x1c40 net/ipv4/ip_input.c:396
[< inline >] NF_HOOK_THRESH ./include/linux/netfilter.h:232
[< inline >] NF_HOOK ./include/linux/netfilter.h:255
[<ffffffff8306b82f>] ip_rcv+0x96f/0x12f0 net/ipv4/ip_input.c:487
[<ffffffff82bd9fb7>] __netif_receive_skb_core+0x1897/0x2a50 net/core/dev.c:4213
[<ffffffff82bdb19a>] __netif_receive_skb+0x2a/0x170 net/core/dev.c:4251
[<ffffffff82bdb493>] netif_receive_skb_internal+0x1b3/0x390 net/core/dev.c:4279
[<ffffffff82bdb6b8>] netif_receive_skb+0x48/0x250 net/core/dev.c:4303
[<ffffffff8241fc75>] tun_get_user+0xbd5/0x28a0 drivers/net/tun.c:1308
[<ffffffff82421b5a>] tun_chr_write_iter+0xda/0x190 drivers/net/tun.c:1332
[< inline >] new_sync_write fs/read_write.c:499
[<ffffffff8151bd44>] __vfs_write+0x334/0x570 fs/read_write.c:512
[<ffffffff8151f85b>] vfs_write+0x17b/0x500 fs/read_write.c:560
[< inline >] SYSC_write fs/read_write.c:607
[<ffffffff81523184>] SyS_write+0xd4/0x1a0 fs/read_write.c:599
[<ffffffff83fc02c1>] entry_SYSCALL_64_fastpath+0x1f/0xc2
It turns out DCCP calls __sk_receive_skb(), and this broke when
lookups no longer took a reference on listeners.
Fix this issue by adding a @refcounted parameter to __sk_receive_skb(),
so that sock_put() is used only when needed.
Fixes: 3b24d854cb ("tcp/dccp: do not touch listener sk_refcnt under synflood")
Signed-off-by: Eric Dumazet <edumazet@google.com>
Reported-by: Andrey Konovalov <andreyknvl@google.com>
Tested-by: Andrey Konovalov <andreyknvl@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
|
2016-11-03 16:16:50 -04:00 |
| .. |
|
9p
|
|
|
|
bluetooth
|
Bluetooth: Add support for appearance in scan rsp
|
2016-09-19 20:19:34 +02:00 |
|
caif
|
|
|
|
irda
|
|
|
|
iucv
|
|
|
|
netfilter
|
netfilter: merge fixup for "nf_tables_netdev: remove redundant ip_hdr assignment"
|
2016-10-05 20:25:48 -04:00 |
|
netns
|
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next
|
2016-09-25 23:34:19 +02:00 |
|
nfc
|
NFC: digital: Add support for NFC DEP Response Waiting Time
|
2016-07-11 02:01:14 +02:00 |
|
phonet
|
sock: struct proto hash function may error
|
2016-02-11 03:54:14 -05:00 |
|
sctp
|
sctp: hold transport instead of assoc when lookup assoc in rx path
|
2016-10-31 16:20:33 -04:00 |
|
tc_act
|
net_sched: act_vlan: add helper inlines to access tcf_vlan info
|
2016-09-23 07:22:11 -04:00 |
|
6lowpan.h
|
6lowpan: add 802.15.4 short addr slaac
|
2016-06-15 20:41:22 -07:00 |
|
act_api.h
|
net_sched: convert tcf_exts from list to pointer array
|
2016-08-17 19:27:51 -04:00 |
|
addrconf.h
|
ipv6: fix a potential deadlock in do_ipv6_setsockopt()
|
2016-10-21 11:29:02 -04:00 |
|
af_ieee802154.h
|
|
|
|
af_rxrpc.h
|
rxrpc: Rewrite the data and ack handling code
|
2016-09-08 11:10:12 +01:00 |
|
af_unix.h
|
af_unix: split 'u->readlock' into two: 'iolock' and 'bindlock'
|
2016-09-04 13:29:29 -07:00 |
|
af_vsock.h
|
VSOCK: Introduce virtio_vsock_common.ko
|
2016-08-02 02:57:29 +03:00 |
|
ah.h
|
|
|
|
arp.h
|
|
|
|
atmclip.h
|
|
|
|
ax25.h
|
|
|
|
ax88796.h
|
|
|
|
bond_3ad.h
|
bonding: 3ad: apply ad_actor settings changes immediately
|
2016-02-09 04:45:49 -05:00 |
|
bond_alb.h
|
|
|
|
bond_options.h
|
|
|
|
bonding.h
|
bonding: quit messing with IOCTL
|
2016-09-27 21:15:21 -04:00 |
|
busy_poll.h
|
net: un-inline sk_busy_loop()
|
2015-11-18 16:17:38 -05:00 |
|
calipso.h
|
calipso: Add a label cache.
|
2016-06-27 15:06:17 -04:00 |
|
cfg80211-wext.h
|
|
|
|
cfg80211.h
|
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
|
2016-10-29 20:33:20 -07:00 |
|
cfg802154.h
|
ieee802154: add netns support
|
2016-07-08 12:20:57 +02:00 |
|
checksum.h
|
csum: Update csum_block_add to use rotate instead of byteswap
|
2016-03-13 15:01:00 -04:00 |
|
cipso_ipv4.h
|
|
|
|
cls_cgroup.h
|
cls_cgroup: get sk_classid only from full sockets
|
2016-04-19 20:09:25 -04:00 |
|
codel.h
|
codel: split into multiple files
|
2016-04-25 16:44:27 -04:00 |
|
codel_impl.h
|
codel: split into multiple files
|
2016-04-25 16:44:27 -04:00 |
|
codel_qdisc.h
|
net_sched: fq_codel: cache skb->truesize into skb->cb
|
2016-06-25 12:19:35 -04:00 |
|
compat.h
|
packet: compat support for sock_fprog
|
2016-06-09 23:41:03 -07:00 |
|
datalink.h
|
|
|
|
dcbevent.h
|
|
|
|
dcbnl.h
|
|
|
|
devlink.h
|
devlink: remove unused priv_size
|
2016-08-26 11:55:18 -07:00 |
|
dn.h
|
|
|
|
dn_dev.h
|
|
|
|
dn_fib.h
|
|
|
|
dn_neigh.h
|
|
|
|
dn_nsp.h
|
|
|
|
dn_route.h
|
|
|
|
dsa.h
|
net: dsa: add port fast ageing
|
2016-09-23 08:38:50 -04:00 |
|
dsfield.h
|
|
|
|
dst.h
|
route: move lwtunnel state to a single place
|
2016-04-25 16:20:09 -04:00 |
|
dst_cache.h
|
net: add dst_cache support
|
2016-02-16 20:21:48 -05:00 |
|
dst_metadata.h
|
net/dst: Utility functions to build dst_metadata without supplying an skb
|
2016-09-10 20:53:55 -07:00 |
|
dst_ops.h
|
|
|
|
esp.h
|
|
|
|
ethoc.h
|
|
|
|
fib_rules.h
|
net: Add l3mdev rule
|
2016-06-08 11:36:02 -07:00 |
|
firewire.h
|
|
|
|
flow.h
|
net: flow: Remove FLOWI_FLAG_L3MDEV_SRC flag
|
2016-09-10 23:12:53 -07:00 |
|
flow_dissector.h
|
rps: flow_dissector: Add the const for the parameter of flow_keys_have_l4
|
2016-09-01 16:51:08 -07:00 |
|
flowcache.h
|
|
|
|
fou.h
|
fou: Add encap ops for IPv6 tunnels
|
2016-05-20 18:03:16 -04:00 |
|
fq.h
|
fq.h: Port memory limit mechanism from fq_codel
|
2016-09-30 13:29:21 +02:00 |
|
fq_impl.h
|
fq.h: Port memory limit mechanism from fq_codel
|
2016-09-30 13:29:21 +02:00 |
|
garp.h
|
|
|
|
gen_stats.h
|
net: sched: do not acquire qdisc spinlock in qdisc/class stats dump
|
2016-06-07 16:37:14 -07:00 |
|
genetlink.h
|
Revert "genl: Add genlmsg_new_unicast() for unicast message allocation"
|
2016-02-18 11:42:19 -05:00 |
|
geneve.h
|
net: Remove deprecated tunnel specific UDP offload functions
|
2016-06-17 20:23:32 -07:00 |
|
gre.h
|
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
|
2016-08-18 01:17:32 -04:00 |
|
gro_cells.h
|
gro_cells: gro_cells_receive now return error code
|
2016-07-22 00:50:41 -04:00 |
|
gtp.h
|
gtp: #define #define _GTP_H_ and not #define _GTP_H
|
2016-07-25 17:55:43 -07:00 |
|
gue.h
|
|
|
|
hwbm.h
|
net: add a hardware buffer management helper API
|
2016-03-14 12:19:46 -04:00 |
|
icmp.h
|
net: snmp: kill STATS_BH macros
|
2016-04-27 22:48:25 -04:00 |
|
ieee80211_radiotap.h
|
mac80211: add support for radiotap timestamp field
|
2016-09-12 11:45:45 +02:00 |
|
ieee802154_netdev.h
|
mac802154: constify ieee802154_llsec_ops structure
|
2016-01-04 20:40:41 +01:00 |
|
if_inet6.h
|
IPv6: fix DESYNC_FACTOR
|
2016-10-14 10:59:15 -04:00 |
|
ila.h
|
ila: Add generic ILA translation facility
|
2015-12-15 23:25:20 -05:00 |
|
inet6_connection_sock.h
|
ipv6: remove unused in6_addr struct
|
2016-03-22 15:45:44 -04:00 |
|
inet6_hashtables.h
|
tcp/dccp: do not touch listener sk_refcnt under synflood
|
2016-04-04 22:11:20 -04:00 |
|
inet_common.h
|
ip4ip6: Support for GSO/GRO
|
2016-05-20 18:03:17 -04:00 |
|
inet_connection_sock.h
|
tcp: increase ICSK_CA_PRIV_SIZE from 64 bytes to 88
|
2016-09-21 00:23:01 -04:00 |
|
inet_ecn.h
|
ipv6: suppress sparse warnings in IP6_ECN_set_ce()
|
2016-08-13 15:08:00 -07:00 |
|
inet_frag.h
|
ipv4: namespacify ip fragment max dist sysctl knob
|
2016-02-16 20:42:54 -05:00 |
|
inet_hashtables.h
|
tcp/dccp: do not touch listener sk_refcnt under synflood
|
2016-04-04 22:11:20 -04:00 |
|
inet_sock.h
|
ipv6: Allow request socks to contain IPv6 options.
|
2016-06-27 15:05:28 -04:00 |
|
inet_timewait_sock.h
|
|
|
|
inetpeer.h
|
inet: tcp: fix inetpeer_set_addr_v4()
|
2015-12-16 00:14:12 -05:00 |
|
ip.h
|
ipv4: allow local fragmentation in ip_finish_output_gso()
|
2016-11-03 16:10:26 -04:00 |
|
ip6_checksum.h
|
ipv6: Pass proto to csum_ipv6_magic as __u8 instead of unsigned short
|
2016-03-13 23:55:13 -04:00 |
|
ip6_fib.h
|
net: ipv6: Fix processing of RAs in presence of VRF
|
2016-10-27 16:30:52 -04:00 |
|
ip6_route.h
|
net: ipv6: Do not consider link state for nexthop validation
|
2016-10-27 16:33:12 -04:00 |
|
ip6_tunnel.h
|
ip6_tunnel: Clear IP6CB in ip6tunnel_xmit()
|
2016-11-02 15:18:36 -04:00 |
|
ip_fib.h
|
switchdev: remove FIB offload infrastructure
|
2016-09-28 04:48:00 -04:00 |
|
ip_tunnels.h
|
ip_tunnel: add collect_md mode to IPIP tunnel
|
2016-09-17 10:13:07 -04:00 |
|
ip_vs.h
|
ipvs: update real-server binding of outgoing connections in SIP-pe
|
2016-06-06 09:47:25 +09:00 |
|
ipcomp.h
|
|
|
|
ipconfig.h
|
|
|
|
ipv6.h
|
Merge branch 'stable-4.8' of git://git.infradead.org/users/pcmoore/selinux into next
|
2016-07-07 10:15:34 +10:00 |
|
ipx.h
|
|
|
|
iw_handler.h
|
cfg80211/wext: fix message ordering
|
2016-01-29 17:13:43 +01:00 |
|
kcm.h
|
kcm: Use stream parser
|
2016-08-17 19:36:23 -04:00 |
|
l3mdev.h
|
net: ipv4: Do not drop to make_route if oif is l3mdev
|
2016-10-13 12:05:26 -04:00 |
|
lapb.h
|
|
|
|
lib80211.h
|
|
|
|
llc.h
|
|
|
|
llc_c_ac.h
|
|
|
|
llc_c_ev.h
|
|
|
|
llc_c_st.h
|
|
|
|
llc_conn.h
|
|
|
|
llc_if.h
|
|
|
|
llc_pdu.h
|
|
|
|
llc_s_ac.h
|
|
|
|
llc_s_ev.h
|
|
|
|
llc_s_st.h
|
|
|
|
llc_sap.h
|
|
|
|
lwtunnel.h
|
net: lwtunnel: Handle fragmentation
|
2016-08-30 22:27:18 -07:00 |
|
mac80211.h
|
mac80211: fix some sphinx warnings
|
2016-10-26 08:01:07 +02:00 |
|
mac802154.h
|
ieee802154: cleanup WARN_ON for fc fetch
|
2016-07-08 13:23:12 +02:00 |
|
mip6.h
|
|
|
|
mld.h
|
|
|
|
mpls.h
|
openvswitch: use mpls_hdr
|
2016-10-03 02:00:22 -04:00 |
|
mpls_iptunnel.h
|
|
|
|
mrp.h
|
|
|
|
ncsi.h
|
net/ncsi: Introduce ncsi_stop_dev()
|
2016-10-04 02:11:51 -04:00 |
|
ndisc.h
|
6lowpan: introduce 6lowpan-nd
|
2016-06-15 20:41:23 -07:00 |
|
neighbour.h
|
|
|
|
net_namespace.h
|
netns: Add a limit on the number of net namespaces
|
2016-08-08 14:42:04 -05:00 |
|
net_ratelimit.h
|
|
|
|
netevent.h
|
neigh: Send a notification when DELAY_PROBE_TIME changes
|
2016-07-05 09:06:29 -07:00 |
|
netlabel.h
|
netlabel: Implement CALIPSO config functions for SMACK.
|
2016-06-27 15:06:18 -04:00 |
|
netlink.h
|
netlink: kill nla_put_u64()
|
2016-05-16 13:46:23 -04:00 |
|
netprio_cgroup.h
|
net: wrap sock->sk_cgrp_prioidx and ->sk_classid inside a struct
|
2015-12-08 22:02:33 -05:00 |
|
netrom.h
|
|
|
|
nexthop.h
|
|
|
|
nl802154.h
|
ieee802154: add netns support
|
2016-07-08 12:20:57 +02:00 |
|
p8022.h
|
|
|
|
ping.h
|
net: ping: make ping_v6_sendmsg static
|
2016-03-23 22:09:58 -04:00 |
|
pkt_cls.h
|
net/sched: pkt_cls: change tc actions order to be as the user sets
|
2016-09-28 05:02:44 -04:00 |
|
pkt_sched.h
|
net: sched: convert qdisc linked list to hashtable
|
2016-08-10 17:19:02 -07:00 |
|
pptp.h
|
pptp: Refactor the struct and macros of PPTP codes
|
2016-08-15 10:55:53 -07:00 |
|
protocol.h
|
udp: Remove udp_offloads
|
2016-04-07 16:53:30 -04:00 |
|
psnap.h
|
|
|
|
raw.h
|
sock: struct proto hash function may error
|
2016-02-11 03:54:14 -05:00 |
|
rawv6.h
|
|
|
|
red.h
|
|
|
|
regulatory.h
|
|
|
|
request_sock.h
|
inet: reqsk_alloc() needs to take care of dead listeners
|
2016-04-04 22:11:19 -04:00 |
|
rose.h
|
|
|
|
route.h
|
net: ipv4: Remove l3mdev_get_saddr
|
2016-09-10 23:12:53 -07:00 |
|
rtnetlink.h
|
net: rtnetlink: add support for the IFLA_STATS_LINK_XSTATS_SLAVE attribute
|
2016-06-30 06:15:04 -04:00 |
|
sch_generic.h
|
sched: add and use qdisc_skb_head helpers
|
2016-09-19 01:47:18 -04:00 |
|
scm.h
|
unix: correctly track in-flight fds in sending process user_struct
|
2016-02-08 10:30:42 -05:00 |
|
secure_seq.h
|
|
|
|
slhc_vj.h
|
|
|
|
snmp.h
|
net: snmp: fix 64bit stats on 32bit arches
|
2016-04-28 11:49:45 -04:00 |
|
sock.h
|
dccp: do not release listeners too soon
|
2016-11-03 16:16:50 -04:00 |
|
sock_reuseport.h
|
soreuseport: fix NULL ptr dereference SO_REUSEPORT after bind
|
2016-01-19 14:44:23 -05:00 |
|
Space.h
|
|
|
|
stp.h
|
|
|
|
strparser.h
|
kcm: Remove TCP specific references from kcm and strparser
|
2016-08-28 23:32:41 -04:00 |
|
switchdev.h
|
switchdev: remove FIB offload infrastructure
|
2016-09-28 04:48:00 -04:00 |
|
tcp.h
|
net: tcp: check skb is non-NULL for exact match on lookups
|
2016-11-03 16:05:44 -04:00 |
|
tcp_states.h
|
|
|
|
timewait_sock.h
|
|
|
|
transp_v6.h
|
ipv6: add new struct ipcm6_cookie
|
2016-05-03 16:08:14 -04:00 |
|
tso.h
|
|
|
|
udp.h
|
udp: must lock the socket in udp_disconnect()
|
2016-10-20 14:45:52 -04:00 |
|
udp_tunnel.h
|
vxlan: Add new UDP encapsulation offload type for VXLAN-GPE
|
2016-06-17 20:23:32 -07:00 |
|
udplite.h
|
|
|
|
vsock_addr.h
|
|
|
|
vxlan.h
|
vxlan: avoid using stale vxlan socket.
|
2016-10-29 20:56:31 -04:00 |
|
wext.h
|
|
|
|
wimax.h
|
|
|
|
x25.h
|
|
|
|
x25device.h
|
|
|
|
xfrm.h
|
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
|
2016-09-23 06:46:57 -04:00 |