diff options
author | David S. Miller <davem@davemloft.net> | 2018-04-21 16:31:52 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2018-04-21 16:32:48 -0400 |
commit | e0ada51db907ed2db5d46ad7ff86a8b5df68e59b (patch) | |
tree | 858966cee69ad8a50e59c4e02dcbde6ba2916151 /net/llc | |
parent | 0638eb573cde5888c0886c7f35da604e5db209a6 (diff) | |
parent | 83beed7b2b26f232d782127792dd0cd4362fdc41 (diff) | |
download | lwn-e0ada51db907ed2db5d46ad7ff86a8b5df68e59b.tar.gz lwn-e0ada51db907ed2db5d46ad7ff86a8b5df68e59b.zip |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Conflicts were simple overlapping changes in microchip
driver.
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/llc')
-rw-r--r-- | net/llc/af_llc.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/net/llc/af_llc.c b/net/llc/af_llc.c index 01dcc0823d1f..6d29b2b94e84 100644 --- a/net/llc/af_llc.c +++ b/net/llc/af_llc.c @@ -189,6 +189,7 @@ static int llc_ui_release(struct socket *sock) { struct sock *sk = sock->sk; struct llc_sock *llc; + struct llc_sap *sap; if (unlikely(sk == NULL)) goto out; @@ -199,9 +200,15 @@ static int llc_ui_release(struct socket *sock) llc->laddr.lsap, llc->daddr.lsap); if (!llc_send_disc(sk)) llc_ui_wait_for_disc(sk, sk->sk_rcvtimeo); + sap = llc->sap; + /* Hold this for release_sock(), so that llc_backlog_rcv() could still + * use it. + */ + llc_sap_hold(sap); if (!sock_flag(sk, SOCK_ZAPPED)) llc_sap_remove_socket(llc->sap, sk); release_sock(sk); + llc_sap_put(sap); if (llc->dev) dev_put(llc->dev); sock_put(sk); |