50 lines
1.1 KiB
Diff
50 lines
1.1 KiB
Diff
From: David S. Miller <davem@davemloft.net>
|
|
Date: Thu, 31 Mar 2011 18:59:10 -0700
|
|
Subject: [PATCH 3/3] appletalk: Fix OOPS in atalk_release().
|
|
|
|
commit c100c8f4c3c6f2a407bdbaaad2c4f1062e6a473a upstream.
|
|
|
|
Commit 60d9f461a20ba59219fdcdc30cbf8e3a4ad3f625 ("appletalk: remove
|
|
the BKL") added a dereference of "sk" before checking for NULL in
|
|
atalk_release().
|
|
|
|
Guard the code block completely, rather than partially, with the
|
|
NULL check.
|
|
|
|
Reported-by: Dave Jones <davej@redhat.com>
|
|
Signed-off-by: David S. Miller <davem@davemloft.net>
|
|
---
|
|
net/appletalk/ddp.c | 11 ++++++-----
|
|
1 files changed, 6 insertions(+), 5 deletions(-)
|
|
|
|
diff --git a/net/appletalk/ddp.c b/net/appletalk/ddp.c
|
|
index 206e771..956a530 100644
|
|
--- a/net/appletalk/ddp.c
|
|
+++ b/net/appletalk/ddp.c
|
|
@@ -1051,16 +1051,17 @@ static int atalk_release(struct socket *sock)
|
|
{
|
|
struct sock *sk = sock->sk;
|
|
|
|
- sock_hold(sk);
|
|
- lock_sock(sk);
|
|
if (sk) {
|
|
+ sock_hold(sk);
|
|
+ lock_sock(sk);
|
|
+
|
|
sock_orphan(sk);
|
|
sock->sk = NULL;
|
|
atalk_destroy_socket(sk);
|
|
- }
|
|
- release_sock(sk);
|
|
- sock_put(sk);
|
|
|
|
+ release_sock(sk);
|
|
+ sock_put(sk);
|
|
+ }
|
|
return 0;
|
|
}
|
|
|
|
--
|
|
1.7.4.1
|
|
|