linux-bl808/net
John Fastabend f87e62d45e net/tls: remove close callback sock unlock/lock around TX work flush
The tls close() callback currently drops the sock lock, makes a
cancel_delayed_work_sync() call, and then relocks the sock.

By restructuring the code we can avoid droping lock and then
reclaiming it. To simplify this we do the following,

 tls_sk_proto_close
 set_bit(CLOSING)
 set_bit(SCHEDULE)
 cancel_delay_work_sync() <- cancel workqueue
 lock_sock(sk)
 ...
 release_sock(sk)
 strp_done()

Setting the CLOSING bit prevents the SCHEDULE bit from being
cleared by any workqueue items e.g. if one happens to be
scheduled and run between when we set SCHEDULE bit and cancel
work. Then because SCHEDULE bit is set now no new work will
be scheduled.

Tested with net selftests and bpf selftests.

Signed-off-by: John Fastabend <john.fastabend@gmail.com>
Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com>
Reviewed-by: Dirk van der Merwe <dirk.vandermerwe@netronome.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
2019-07-22 16:04:16 +02:00
..
6lowpan
9p 9p pull request for inclusion in 5.13 2019-07-12 17:31:19 -07:00
802
8021q
appletalk
atm
ax25
batman-adv Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2019-07-08 19:48:57 -07:00
bluetooth Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next 2019-07-11 10:55:49 -07:00
bpf
bpfilter Kbuild updates for v5.3 2019-07-12 16:03:16 -07:00
bridge Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next 2019-07-11 10:55:49 -07:00
caif
can
ceph Driver Core and debugfs changes for 5.3-rc1 2019-07-12 12:24:03 -07:00
core tcp: fix tcp_set_congestion_control() use from bpf hook 2019-07-18 20:33:48 -07:00
dcb
dccp ipv6: elide flowlabel check if no exclusive leases exist 2019-07-08 19:38:03 -07:00
decnet
dns_resolver Revert "Merge tag 'keys-acl-20190703' of git://git.kernel.org/pub/scm/linux/kernel/git/dhowells/linux-fs" 2019-07-10 18:43:43 -07:00
dsa net: dsa: sja1105: Fix missing unlock on error in sk_buff() 2019-07-18 16:32:39 -07:00
ethernet
hsr hsr: switch ->dellink() to ->ndo_uninit() 2019-07-11 14:37:45 -07:00
ieee802154
ife
ipv4 tcp: fix tcp_set_congestion_control() use from bpf hook 2019-07-18 20:33:48 -07:00
ipv6 ipv6: Unlink sibling route in case of failure 2019-07-18 12:01:43 -07:00
iucv
kcm
key Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2019-07-08 19:48:57 -07:00
l2tp ipv6: elide flowlabel check if no exclusive leases exist 2019-07-08 19:38:03 -07:00
l3mdev
lapb
llc
mac80211 Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next 2019-07-11 10:55:49 -07:00
mac802154
mpls
ncsi
netfilter Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next 2019-07-11 10:55:49 -07:00
netlabel
netlink
netrom
nfc
nsh
openvswitch net: openvswitch: do not update max_headroom if new headroom is equal to old headroom 2019-07-12 15:16:58 -07:00
packet
phonet
psample
qrtr
rds net/rds: Initialize ic->i_fastreg_wrs upon allocation 2019-07-17 12:06:52 -07:00
rfkill
rose
rxrpc Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next 2019-07-11 10:55:49 -07:00
sched net_sched: unset TCQ_F_CAN_BYPASS when adding filters 2019-07-17 13:34:09 -07:00
sctp net: sctp: fix warning "NULL check before some freeing functions is not needed" 2019-07-17 12:01:19 -07:00
smc
strparser
sunrpc Driver Core and debugfs changes for 5.3-rc1 2019-07-12 12:24:03 -07:00
switchdev
tipc tipc: initialize 'validated' field of received packets 2019-07-17 15:24:38 -07:00
tls net/tls: remove close callback sock unlock/lock around TX work flush 2019-07-22 16:04:16 +02:00
unix
vmw_vsock vsock/virtio: fix flush of works during the .remove() 2019-07-08 15:35:17 -07:00
wimax
wireless Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next 2019-07-11 10:55:49 -07:00
x25
xdp xdp: fix potential deadlock on socket mutex 2019-07-12 15:02:21 +02:00
xfrm Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2019-07-08 19:48:57 -07:00
compat.c
Kconfig
Makefile
socket.c for-5.3/io_uring-20190711 2019-07-13 10:36:53 -07:00
sysctl_net.c