2016-12-15 19:44:10

by Scott Mayhew

[permalink] [raw]
Subject: [nfs-utils PATCH] exportfs: fix path comparison in unexportfs_parsed()

Passing a path like /export1 to unexportfs_parsed() matches not only
/export1, but /export11, /export100, /export1forthemoney, etc. which can
result in some nasty surprises when unexporting individual exports.

Signed-off-by: Scott Mayhew <[email protected]>
---
utils/exportfs/exportfs.c | 2 ++
1 file changed, 2 insertions(+)

diff --git a/utils/exportfs/exportfs.c b/utils/exportfs/exportfs.c
index b7a910e..a763272 100644
--- a/utils/exportfs/exportfs.c
+++ b/utils/exportfs/exportfs.c
@@ -345,6 +345,8 @@ unexportfs_parsed(char *hname, char *path, int verbose)
nlen--;

for (exp = exportlist[htype].p_head; exp; exp = exp->m_next) {
+ if (strlen(exp->m_export.e_path) != nlen)
+ continue;
if (path && strncmp(path, exp->m_export.e_path, nlen))
continue;
if (htype != exp->m_client->m_type)
--
2.7.4



2016-12-17 18:43:25

by Steve Dickson

[permalink] [raw]
Subject: Re: [nfs-utils PATCH] exportfs: fix path comparison in unexportfs_parsed()



On 12/15/2016 02:37 PM, Scott Mayhew wrote:
> Passing a path like /export1 to unexportfs_parsed() matches not only
> /export1, but /export11, /export100, /export1forthemoney, etc. which can
> result in some nasty surprises when unexporting individual exports.
>
> Signed-off-by: Scott Mayhew <[email protected]>
Committed...

steved.

> ---
> utils/exportfs/exportfs.c | 2 ++
> 1 file changed, 2 insertions(+)
>
> diff --git a/utils/exportfs/exportfs.c b/utils/exportfs/exportfs.c
> index b7a910e..a763272 100644
> --- a/utils/exportfs/exportfs.c
> +++ b/utils/exportfs/exportfs.c
> @@ -345,6 +345,8 @@ unexportfs_parsed(char *hname, char *path, int verbose)
> nlen--;
>
> for (exp = exportlist[htype].p_head; exp; exp = exp->m_next) {
> + if (strlen(exp->m_export.e_path) != nlen)
> + continue;
> if (path && strncmp(path, exp->m_export.e_path, nlen))
> continue;
> if (htype != exp->m_client->m_type)
> -- 2.7.4
>