summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkib <kib@FreeBSD.org>2009-06-29 18:09:07 +0000
committerkib <kib@FreeBSD.org>2009-06-29 18:09:07 +0000
commit242d1f11afe79e3633bfd335f3eb01bdb4ff667c (patch)
treefc060754086b42ace6e1a107d278d695395cb463
parent0e6117f2210ec656812fa7041ea1153c84f1fa08 (diff)
downloadFreeBSD-src-242d1f11afe79e3633bfd335f3eb01bdb4ff667c.zip
FreeBSD-src-242d1f11afe79e3633bfd335f3eb01bdb4ff667c.tar.gz
Free struct ucreds allocated in vfs_hang_addrlist() when deleting
the export element. While there, remove register storage-class specifiers. Reported and tested by: pho Reviewed by: kan Approved by: re (kensmith)
-rw-r--r--sys/kern/vfs_export.c18
1 files changed, 14 insertions, 4 deletions
diff --git a/sys/kern/vfs_export.c b/sys/kern/vfs_export.c
index ee8a35b..d898c08 100644
--- a/sys/kern/vfs_export.c
+++ b/sys/kern/vfs_export.c
@@ -220,9 +220,13 @@ out:
static int
vfs_free_netcred(struct radix_node *rn, void *w)
{
- register struct radix_node_head *rnh = (struct radix_node_head *) w;
+ struct radix_node_head *rnh = (struct radix_node_head *) w;
+ struct ucred *cred;
(*rnh->rnh_deladdr) (rn->rn_key, rn->rn_mask, rnh);
+ cred = ((struct netcred *)rn)->netc_anon;
+ if (cred != NULL)
+ crfree(cred);
free(rn, M_NETADDR);
return (0);
}
@@ -233,10 +237,11 @@ vfs_free_netcred(struct radix_node *rn, void *w)
static void
vfs_free_addrlist(struct netexport *nep)
{
- register int i;
- register struct radix_node_head *rnh;
+ int i;
+ struct radix_node_head *rnh;
+ struct ucred *cred;
- for (i = 0; i <= AF_MAX; i++)
+ for (i = 0; i <= AF_MAX; i++) {
if ((rnh = nep->ne_rtable[i])) {
RADIX_NODE_HEAD_LOCK(rnh);
(*rnh->rnh_walktree) (rnh, vfs_free_netcred, rnh);
@@ -245,6 +250,11 @@ vfs_free_addrlist(struct netexport *nep)
free(rnh, M_RTABLE);
nep->ne_rtable[i] = NULL; /* not SMP safe XXX */
}
+ }
+ cred = nep->ne_defexported.netc_anon;
+ if (cred != NULL)
+ crfree(cred);
+
}
/*
OpenPOWER on IntegriCloud