diff options
| -rw-r--r-- | fs/nfsd/export.c | 15 | 
1 files changed, 11 insertions, 4 deletions
diff --git a/fs/nfsd/export.c b/fs/nfsd/export.c index 5f38ea36e266..af51cf9bf2e3 100644 --- a/fs/nfsd/export.c +++ b/fs/nfsd/export.c @@ -536,16 +536,12 @@ static int svc_export_parse(struct cache_detail *cd, char *mesg, int mlen)  		if (err)  			goto out3;  		exp.ex_anon_uid= make_kuid(&init_user_ns, an_int); -		if (!uid_valid(exp.ex_anon_uid)) -			goto out3;  		/* anon gid */  		err = get_int(&mesg, &an_int);  		if (err)  			goto out3;  		exp.ex_anon_gid= make_kgid(&init_user_ns, an_int); -		if (!gid_valid(exp.ex_anon_gid)) -			goto out3;  		/* fsid */  		err = get_int(&mesg, &an_int); @@ -583,6 +579,17 @@ static int svc_export_parse(struct cache_detail *cd, char *mesg, int mlen)  				   exp.ex_uuid);  		if (err)  			goto out4; +		/* +		 * For some reason exportfs has been passing down an +		 * invalid (-1) uid & gid on the "dummy" export which it +		 * uses to test export support.  To make sure exportfs +		 * sees errors from check_export we therefore need to +		 * delay these checks till after check_export: +		 */ +		if (!uid_valid(exp.ex_anon_uid)) +			goto out4; +		if (!gid_valid(exp.ex_anon_gid)) +			goto out4;  	}  	expp = svc_export_lookup(&exp);  | 
