android_kernel_sony_sdm845/net
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Eric Dumazet c8c1eec578 net: stream: purge sk_error_queue in sk_stream_kill_queues()
[ Upstream commit e0c8bccd40fc1c19e1d246c39bcf79e357e1ada3 ]

Changheon Lee reported TCP socket leaks, with a nice repro.

It seems we leak TCP sockets with the following sequence:

1) SOF_TIMESTAMPING_TX_ACK is enabled on the socket.

   Each ACK will cook an skb put in error queue, from __skb_tstamp_tx().
   __skb_tstamp_tx() is using skb_clone(), unless
   SOF_TIMESTAMPING_OPT_TSONLY was also requested.

2) If the application is also using MSG_ZEROCOPY, then we put in the
   error queue cloned skbs that had a struct ubuf_info attached to them.

   Whenever an struct ubuf_info is allocated, sock_zerocopy_alloc()
   does a sock_hold().

   As long as the cloned skbs are still in sk_error_queue,
   socket refcount is kept elevated.

3) Application closes the socket, while error queue is not empty.

Since tcp_close() no longer purges the socket error queue,
we might end up with a TCP socket with at least one skb in
error queue keeping the socket alive forever.

This bug can be (ab)used to consume all kernel memory
and freeze the host.

We need to purge the error queue, with proper synchronization
against concurrent writers.

Fixes: 24bcbe1cc69f ("net: stream: don't purge sk_error_queue in sk_stream_kill_queues()")
Reported-by: Changheon Lee <darklight2357@icloud.com>
Signed-off-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2023-01-07 12:07:30 +01:00
..
6lowpan 6lowpan: Off by one handling ->nexthdr 2020-01-29 10:24:22 +01:00
9p net/9p: Fix a potential socket leak in p9_socket_open 2022-12-08 11:15:41 +01:00
802 net/802/garp: fix memleak in garp_request_join() 2021-08-04 11:58:02 +02:00
8021q vlan: fix memory leak in vlan_dev_set_egress_priority 2020-01-12 11:24:27 +01:00
appletalk appletalk: Fix skb allocation size in loopback case 2021-04-07 12:05:39 +02:00
atm net/atm: fix proc_mpc_write incorrect return value 2022-11-03 23:49:15 +09:00
ax25 ax25: Fix NULL pointer dereference in ax25_kill_by_device 2022-03-16 12:49:00 +01:00
batman-adv batman-adv: Don't expect inter-netns unique iflink indices 2022-03-16 12:49:01 +01:00
bluetooth Bluetooth: hci_core: don't call kfree_skb() under spin_lock_irqsave() 2023-01-07 12:07:23 +01:00
bridge netfilter: br_netfilter: Drop dst references before setting. 2022-09-15 12:39:46 +02:00
caif net: caif: fix double disconnect client in chnl_net_open() 2022-11-25 17:35:39 +01:00
can can: bcm: check the result of can_send() in bcm_can_tx() 2022-10-26 13:15:46 +02:00
ceph libceph: clear con->out_msg on Policy::stateful_server faults 2020-11-10 10:23:59 +01:00
core net: stream: purge sk_error_queue in sk_stream_kill_queues() 2023-01-07 12:07:30 +01:00
dcb net: dcb: disable softirqs in dcbnl_flush_dev() 2022-03-08 19:00:59 +01:00
dccp dccp: don't duplicate ccid when cloning dccp sock 2021-09-22 11:43:09 +02:00
decnet net: decnet: Fix sleeping inside in af_decnet 2021-07-28 09:14:27 +02:00
dns_resolver KEYS: DNS: fix parsing multiple options 2018-07-22 14:27:39 +02:00
dsa net: dsa: tag_brcm: Fix skb->fwd_offload_mark location 2020-04-13 10:32:53 +02:00
ethernet net: add annotations on hh->hh_len lockless accesses 2020-01-12 11:24:19 +01:00
hsr net: hsr: Fix potential use-after-free 2022-12-08 11:15:41 +01:00
ieee802154 net: ieee802154: fix error return code in dgram_bind() 2022-11-03 23:49:17 +09:00
ipv4 net/tunnel: wait until all sk_user_data reader finish before releasing the sock 2023-01-07 12:07:21 +01:00
ipv6 tcp/udp: Fix memory leak in ipv6_renew_options(). 2022-12-08 11:15:42 +01:00
ipx ipx: call ipxitf_put() in ioctl error path 2017-05-25 15:44:41 +02:00
irda irda: Only insert new objects into the global database via setsockopt 2018-09-15 09:43:01 +02:00
iucv net/af_iucv: set correct sk_protocol for child sockets 2020-12-11 13:37:56 +01:00
kcm kcm: avoid potential race in kcm_tx_work 2022-11-25 17:35:42 +01:00
key af_key: Fix send_acquire race with pfkey_register 2022-12-08 11:15:39 +01:00
l2tp l2tp: fix race in pppol2tp_release with session object destroy 2022-06-25 11:45:19 +02:00
l3mdev
lapb net: lapb: Copy the skb before sending a packet 2021-02-10 09:09:25 +01:00
llc llc: only change llc->dev when bind() succeeds 2022-03-28 08:06:06 +02:00
mac80211 wifi: mac80211: Fix ack frame idr leak when mesh has no route 2022-12-08 11:15:39 +01:00
mac802154 mac802154: fix missing INIT_LIST_HEAD in ieee802154_if_add() 2022-12-14 11:24:34 +01:00
mpls net: avoid infinite loop in mpls_gso_segment when mpls_hlen == 0 2021-03-17 16:10:13 +01:00
ncsi net/ncsi: Use real net-device for response handler 2021-01-12 19:49:01 +01:00
netfilter ipvs: use explicitly signed chars 2022-11-10 15:46:05 +01:00
netlabel cipso,calipso: resolve a number of problems with the DOI refcounts 2022-01-27 08:47:42 +01:00
netlink netlink: do not reset transport header in netlink_recvmsg() 2022-05-18 09:15:43 +02:00
netrom netrom: Decrease sock refcount when sock timers expire 2021-07-28 09:14:27 +02:00
nfc NFC: nci: Bounds check struct nfc_target arrays 2022-12-14 11:24:34 +01:00
openvswitch openvswitch: Fix flow lookup to use unmasked key 2023-01-07 12:07:29 +01:00
packet packet: do not set TP_STATUS_CSUM_VALID on CHECKSUM_COMPLETE 2022-12-08 11:15:41 +01:00
phonet phonet: refcount leak in pep_sock_accep 2022-01-11 13:38:12 +01:00
qrtr net: qrtr: fix a kernel-infoleak in qrtr_recvmsg() 2021-03-30 14:41:42 +02:00
rds net: rds: don't hold sock lock when cancelling work from rds_tcp_reset_callbacks() 2022-10-26 13:15:40 +02:00
rfkill rfkill: Fix incorrect check to avoid NULL pointer dereference 2020-01-12 11:24:23 +01:00
rose rose: Fix NULL pointer dereference in rose_send_frame() 2022-11-10 15:46:05 +01:00
rxrpc rxrpc: Don't try to resend the request if we're receiving the reply 2022-06-14 16:52:33 +02:00
sched net_sched: reject TCF_EM_SIMPLE case for complex ematch module 2023-01-07 12:07:30 +01:00
sctp sctp: read sk->sk_bound_dev_if once in sctp_rcv() 2022-06-14 16:52:32 +02:00
strparser strparser: Fix incorrect strp->need_bytes value. 2018-04-29 11:32:02 +02:00
sunrpc SUNRPC: Fix missing release socket in rpc_sockname() 2023-01-07 12:07:19 +01:00
switchdev
tipc tipc: Fix potential OOB in tipc_link_proto_rcv() 2022-12-14 11:24:35 +01:00
unix af_unix: annote lockless accesses to unix_tot_inflight & gc_in_progress 2022-01-27 08:47:41 +01:00
vmw_vsock net: vmw_vsock: vmci: Check memcpy_from_msg() 2023-01-07 12:07:21 +01:00
wimax
wireless wifi: cfg80211: debugfs: fix return type in ht40allow_map_read() 2022-09-15 12:39:44 +02:00
x25 net/x25: Fix skb leak in x25_lapb_receive_frame() 2022-11-25 17:35:40 +01:00
xfrm xfrm: Update ipcomp_scratches with NULL when freed 2022-10-26 13:15:45 +02:00
compat.c net: Return the correct errno code 2021-06-30 08:49:12 -04:00
Kconfig
Makefile net: split out functions related to registering inflight socket files 2021-08-04 11:58:01 +02:00
socket.c net: Fix a data-race around sysctl_somaxconn. 2022-09-05 10:23:55 +02:00
sysctl_net.c