]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - net/sunrpc/svcauth_unix.c
svcrpc: fix rare race on unix_domain creation
[karo-tx-linux.git] / net / sunrpc / svcauth_unix.c
index 30916b06c12bd7f5ade9f9cea0641e51ac52e528..d100bf2b4e8171590632605bd8b6c496838fd960 100644 (file)
@@ -38,6 +38,14 @@ struct unix_domain {
 
 extern struct auth_ops svcauth_unix;
 
+static void svcauth_unix_domain_release(struct auth_domain *dom)
+{
+       struct unix_domain *ud = container_of(dom, struct unix_domain, h);
+
+       kfree(dom->name);
+       kfree(ud);
+}
+
 struct auth_domain *unix_domain_find(char *name)
 {
        struct auth_domain *rv;
@@ -47,7 +55,7 @@ struct auth_domain *unix_domain_find(char *name)
        while(1) {
                if (rv) {
                        if (new && rv != &new->h)
-                               auth_domain_put(&new->h);
+                               svcauth_unix_domain_release(new);
 
                        if (rv->flavour != &svcauth_unix) {
                                auth_domain_put(rv);
@@ -74,14 +82,6 @@ struct auth_domain *unix_domain_find(char *name)
 }
 EXPORT_SYMBOL_GPL(unix_domain_find);
 
-static void svcauth_unix_domain_release(struct auth_domain *dom)
-{
-       struct unix_domain *ud = container_of(dom, struct unix_domain, h);
-
-       kfree(dom->name);
-       kfree(ud);
-}
-
 
 /**************************************************
  * cache for IP address to unix_domain