Bug 1007626 - [exportfs] Validate export entry fail. And when start nfs server, should not export the invalid entry;
Summary: [exportfs] Validate export entry fail. And when start nfs server, should not ...
Keywords:
Status: CLOSED WONTFIX
Alias: None
Product: Red Hat Enterprise Linux 5
Classification: Red Hat
Component: nfs-utils
Version: 5.10
Hardware: All
OS: Linux
unspecified
unspecified
Target Milestone: rc
: ---
Assignee: Steve Dickson
QA Contact: Red Hat Kernel QE team
URL:
Whiteboard:
Depends On:
Blocks: 1007627 1007628
TreeView+ depends on / blocked
 
Reported: 2013-09-13 02:14 UTC by JianHong Yin
Modified: 2014-02-05 22:16 UTC (History)
2 users (show)

Fixed In Version:
Doc Type: Bug Fix
Doc Text:
Clone Of:
: 1007627 1007628 (view as bug list)
Environment:
Last Closed: 2014-02-05 22:16:39 UTC
Target Upstream Version:


Attachments (Terms of Use)

Description JianHong Yin 2013-09-13 02:14:47 UTC
Description of problem:
when start nfs server, we should verify the export entries:
  -when I export an directory in tmpfs without fsid= specified,
  -I can export successfuly, * but can not mount it from client.
  --the server log indicate: "Cannot export $dir, possibly unsupported filesystem or fsid= required"
  -We think that, exportfs should verify the export entries, if invalid then tell user that's invalid, cannot export

Version-Release number of selected component (if applicable):
all version in RHEL5.9 5.10 6.x 7.0

How reproducible:
100%

Steps to Reproduce:
0. backup your /etc/exports
1. echo "/dev/shm  *(ro)" >/etc/exports
2. service nfs restart
3. exportfs   or  showmount -e

Actual results:
service nfs restart           ok
exportfs output:
/dev/shm      <world>

Expected results:
service nfs restart           should output error/warn: 
and should not export success, exportfs no output

Additional info:

Comment 1 JianHong Yin 2013-09-13 12:28:48 UTC
Debug, and review the code of exportfs,
find that: this is a bug of exportfs(also about kernel):

static int test_export(char *path, int with_fsid)
{
        char buf[1024];
        int fd, n;

        sprintf(buf, "-test-client- %s 3 %d -1 -1 0\n",
                path,
                with_fsid ? NFSEXP_FSID : 0);
        fd = open("/proc/net/rpc/nfsd.export/channel", O_WRONLY);
        if (fd < 0)
                return 0;
        n = write(fd, buf, strlen(buf));
        close(fd);
        if (n < 0)
                return 0;
        return 1;
}

1. if the path is an tmpfs(no uuid), and with_fsid==0,
this function test_export still return 1 (write success). that's wrong.

2. and another problem: validate_export() just generate log and return void.
We think that validate_export() should return an int value to indicate whether the path can export. And in export_all(), should not export the path if invalid;

static void
export_all(int verbose)
{
        nfs_export      *exp;
        int             i;

        for (i = 0; i < MCL_MAXTYPES; i++) {
                for (exp = exportlist[i].p_head; exp; exp = exp->m_next) {
                        if (verbose)
                                printf("exporting %s:%s\n",
                                       exp->m_client->m_hostname,
                                       exp->m_export.e_path);
                        exp->m_xtabent = 1;
                        exp->m_mayexport = 1;
                        exp->m_changed = 1;
                        exp->m_warned = 0;
                        validate_export(exp);
                }
        }
}


static void <<<- should return int value to indicate whether the path can export
validate_export(nfs_export *exp)
{

Comment 2 JianHong Yin 2013-09-14 06:52:40 UTC
#BEGIN
--- exportfs.c	2013-06-06 15:12:58.881567360 +0800
+++ exportfs.c.new	2013-09-14 14:50:56.719877598 +0800
@@ -475,6 +475,9 @@ validate_export(nfs_export *exp)
 			xlog(L_ERROR, "%s does not support NFS export", path);
 		return;
 
+	} else {
+		xlog(L_ERROR, "Assert: test_export() %s fail", path);
+		return;
 	}
 }

#END

this patch could avoid the test_export work fail.

Comment 3 RHEL Program Management 2014-01-29 10:34:12 UTC
This request was evaluated by Red Hat Product Management for inclusion
in a Red Hat Enterprise Linux release.  Product Management has
requested further review of this request by Red Hat Engineering, for
potential inclusion in a Red Hat Enterprise Linux release for currently
deployed products.  This request is not yet committed for inclusion in
a release.

Comment 4 RHEL Program Management 2014-02-05 22:16:39 UTC
Development Management has reviewed and declined this request.
You may appeal this decision by reopening this request.


Note You need to log in before you can comment on or make changes to this bug.