vfs_export_lookup: Fix r324054

When using the default address list nam is still valid, the code in
r324054 assumed that is was NULL.

Reported by:	Guy Yur <guyyur@gmail.com>
Tested by:	Guy Yur <guyyur@gmail.com>
This commit is contained in:
manu 2017-10-06 09:02:36 +00:00
parent 7bd570a105
commit 13125fb720

View File

@ -459,34 +459,33 @@ vfs_export_lookup(struct mount *mp, struct sockaddr *nam)
return (NULL);
/*
* If no address is provided, use the default if it exists.
* Lookup in the export list
*/
if (nam == NULL) {
if ((mp->mnt_flag & MNT_DEFEXPORTED) != 0)
return (&nep->ne_defexported);
return (NULL);
if (nam != NULL) {
saddr = nam;
rnh = NULL;
switch (saddr->sa_family) {
case AF_INET:
rnh = nep->ne4;
break;
case AF_INET6:
rnh = nep->ne6;
break;
}
if (rnh != NULL) {
RADIX_NODE_HEAD_RLOCK(rnh);
np = (struct netcred *) (*rnh->rnh_matchaddr)(saddr, &rnh->rh);
RADIX_NODE_HEAD_RUNLOCK(rnh);
if (np != NULL && (np->netc_rnodes->rn_flags & RNF_ROOT) != 0)
return (NULL);
}
}
/*
* Lookup in the export list
* If no address match, use the default if it exists.
*/
saddr = nam;
rnh = NULL;
switch (saddr->sa_family) {
case AF_INET:
rnh = nep->ne4;
break;
case AF_INET6:
rnh = nep->ne6;
break;
}
if (rnh != NULL) {
RADIX_NODE_HEAD_RLOCK(rnh);
np = (struct netcred *) (*rnh->rnh_matchaddr)(saddr, &rnh->rh);
RADIX_NODE_HEAD_RUNLOCK(rnh);
if (np != NULL && (np->netc_rnodes->rn_flags & RNF_ROOT) != 0)
return (NULL);
}
if (np == NULL && (mp->mnt_flag & MNT_DEFEXPORTED) != 0)
return (&nep->ne_defexported);
return (np);
}