Print this page
Try to remove assumption that zone's root vnode is marked VROOT
@@ -409,11 +409,11 @@
rfs_climb_crossmnt(vnode_t **dvpp, struct exportinfo **exip, cred_t *cr)
{
struct exportinfo *exi;
vnode_t *dvp = *dvpp;
- ASSERT(dvp->v_flag & VROOT);
+ ASSERT((dvp->v_flag & VROOT) || VN_IS_CURZONEROOT(dvp));
VN_HOLD(dvp);
dvp = untraverse(dvp);
exi = nfs_vptoexi(NULL, dvp, cr, NULL, NULL, FALSE);
if (exi == NULL) {
@@ -488,11 +488,11 @@
* then the ".." refers beyond the root of an exported filesystem.
*/
if (strcmp(da->da_name, "..") == 0 &&
EQFID(&exi->exi_fid, (fid_t *)&fhp->fh_len)) {
if ((exi->exi_export.ex_flags & EX_NOHIDE) &&
- (dvp->v_flag & VROOT)) {
+ ((dvp->v_flag & VROOT) || VN_IS_CURZONEROOT(dvp))) {
/*
* special case for ".." and 'nohide'exported root
*/
if (rfs_climb_crossmnt(&dvp, &exi, cr) != 0) {
error = NFSERR_ACCES;