Bug 1007626
Summary: | [exportfs] Validate export entry fail. And when start nfs server, should not export the invalid entry; | |||
---|---|---|---|---|
Product: | Red Hat Enterprise Linux 5 | Reporter: | JianHong Yin <jiyin> | |
Component: | nfs-utils | Assignee: | Steve Dickson <steved> | |
Status: | CLOSED WONTFIX | QA Contact: | Red Hat Kernel QE team <kernel-qe> | |
Severity: | unspecified | Docs Contact: | ||
Priority: | unspecified | |||
Version: | 5.10 | CC: | jlayton, steved | |
Target Milestone: | rc | |||
Target Release: | --- | |||
Hardware: | All | |||
OS: | Linux | |||
Whiteboard: | ||||
Fixed In Version: | Doc Type: | Bug Fix | ||
Doc Text: | Story Points: | --- | ||
Clone Of: | ||||
: | 1007627 1007628 (view as bug list) | Environment: | ||
Last Closed: | 2014-02-05 22:16:39 UTC | Type: | Bug | |
Regression: | --- | Mount Type: | --- | |
Documentation: | --- | CRM: | ||
Verified Versions: | Category: | --- | ||
oVirt Team: | --- | RHEL 7.3 requirements from Atomic Host: | ||
Cloudforms Team: | --- | Target Upstream Version: | ||
Embargoed: | ||||
Bug Depends On: | ||||
Bug Blocks: | 1007627, 1007628 |
Description
JianHong Yin
2013-09-13 02:14:47 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) { #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. 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. Development Management has reviewed and declined this request. You may appeal this decision by reopening this request. |