diff options
author | Linus Torvalds <torvalds@g5.osdl.org> | 2005-09-29 08:56:47 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2005-09-29 08:56:47 -0700 |
commit | eb693d2994eb762b2201aead31066265ab0be20b (patch) | |
tree | 424e1e7f3d272d0fd5888435176b386594ce121f /net/core/sock.c | |
parent | 6dec3cf5cdb600f39b9eac3349f6bf50eab87731 (diff) | |
parent | 01d40f28b125e0a9aa0ec24642be67fc4c5dfaff (diff) | |
download | linux-eb693d2994eb762b2201aead31066265ab0be20b.tar.bz2 |
Merge master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
Diffstat (limited to 'net/core/sock.c')
-rw-r--r-- | net/core/sock.c | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/net/core/sock.c b/net/core/sock.c index ac63b56e23b2..928d2a1d6d8e 100644 --- a/net/core/sock.c +++ b/net/core/sock.c @@ -660,16 +660,20 @@ struct sock *sk_alloc(int family, unsigned int __nocast priority, sock_lock_init(sk); } - if (security_sk_alloc(sk, family, priority)) { - if (slab != NULL) - kmem_cache_free(slab, sk); - else - kfree(sk); - sk = NULL; - } else - __module_get(prot->owner); + if (security_sk_alloc(sk, family, priority)) + goto out_free; + + if (!try_module_get(prot->owner)) + goto out_free; } return sk; + +out_free: + if (slab != NULL) + kmem_cache_free(slab, sk); + else + kfree(sk); + return NULL; } void sk_free(struct sock *sk) |