| From 427d6c6646d868fbd3094e7e2e1644d480cd9204 Mon Sep 17 00:00:00 2001 |
| From: "J. Bruce Fields" <bfields@redhat.com> |
| Date: Fri, 13 Sep 2013 11:08:45 -0400 |
| Subject: nfsd: return better errors to exportfs |
| |
| From: "J. Bruce Fields" <bfields@redhat.com> |
| |
| commit 427d6c6646d868fbd3094e7e2e1644d480cd9204 upstream. |
| |
| Someone noticed exportfs happily accepted exports that would later be |
| rejected when mountd tried to give them to the kernel. Fix this. |
| |
| This is a regression from 4c1e1b34d5c800ad3ac9a7e2805b0bea70ad2278 |
| "nfsd: Store ex_anon_uid and ex_anon_gid as kuids and kgids". |
| |
| Cc: "Eric W. Biederman" <ebiederm@xmission.com> |
| Reported-by: Yin.JianHong <jiyin@redhat.com> |
| Signed-off-by: J. Bruce Fields <bfields@redhat.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| fs/nfsd/export.c | 15 +++++++++++---- |
| 1 file changed, 11 insertions(+), 4 deletions(-) |
| |
| --- a/fs/nfsd/export.c |
| +++ b/fs/nfsd/export.c |
| @@ -536,16 +536,12 @@ static int svc_export_parse(struct cache |
| 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 |
| 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); |