X-Git-Url: http://ftp.safe.ca/?a=blobdiff_plain;f=net%2Fcore%2Fsock.c;h=928d2a1d6d8e7bbc42dcb01f56d598244b12e575;hb=a79af59efd20990473d579b1d8d70bb120f0920c;hp=ac63b56e23b29c45113df81fa226bc2c9568d758;hpb=9356b8fc07dc126cd91d2b12f314d760ab48996e;p=safe%2Fjmp%2Flinux-2.6 diff --git a/net/core/sock.c b/net/core/sock.c index ac63b56..928d2a1 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)