nfsd: fix possible oops on re-insertion of rpcsec_gss modules
The handling of the re-registration case is wrong here; the "test" that was returned from auth_domain_lookup will not be used again, so that reference should be put. And auth_domain_lookup never did anything with "new" in this case, so we should just clean it up ourself. Thanks to Akinobu Mita for bug report, analysis, and testing. Cc: Akinobu Mita <akinobu.mita@gmail.com> Signed-off-by: "J. Bruce Fields" <bfields@citi.umich.edu> Cc: Neil Brown <neilb@suse.de> Cc: Trond Myklebust <trond.myklebust@fys.uio.no> Cc: <stable@kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
d1709e477f
commit
cb27680580
|
@ -769,11 +769,12 @@ svcauth_gss_register_pseudoflavor(u32 pseudoflavor, char * name)
|
|||
new->h.flavour = &svcauthops_gss;
|
||||
new->pseudoflavor = pseudoflavor;
|
||||
|
||||
stat = 0;
|
||||
test = auth_domain_lookup(name, &new->h);
|
||||
if (test != &new->h) { /* XXX Duplicate registration? */
|
||||
auth_domain_put(&new->h);
|
||||
/* dangling ref-count... */
|
||||
goto out;
|
||||
if (test != &new->h) { /* Duplicate registration */
|
||||
auth_domain_put(test);
|
||||
kfree(new->h.name);
|
||||
goto out_free_dom;
|
||||
}
|
||||
return 0;
|
||||
|
||||
|
|
Loading…
Reference in New Issue