cifs: check MaxPathNameComponentLength != 0 before using it

Message ID 20171030022803.31066-1-lsahlber@redhat.com
State New
Headers show
Series
  • cifs: check MaxPathNameComponentLength != 0 before using it
Related show

Commit Message

Leif Sahlberg Oct. 30, 2017, 2:28 a.m.
And fix tcon leak in error path.

Signed-off-by: Ronnie Sahlberg <lsahlber@redhat.com>
---
 fs/cifs/dir.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

Comments

Steve French Oct. 30, 2017, 7:17 a.m. | #1
merged into cifs-2.6.git for-next

On Sun, Oct 29, 2017 at 9:28 PM, Ronnie Sahlberg <lsahlber@redhat.com> wrote:
> And fix tcon leak in error path.
>
> Signed-off-by: Ronnie Sahlberg <lsahlber@redhat.com>
> ---
>  fs/cifs/dir.c | 5 +++--
>  1 file changed, 3 insertions(+), 2 deletions(-)
>
> diff --git a/fs/cifs/dir.c b/fs/cifs/dir.c
> index e702d48bd023..81ba6e0d88d8 100644
> --- a/fs/cifs/dir.c
> +++ b/fs/cifs/dir.c
> @@ -204,7 +204,8 @@ check_name(struct dentry *direntry, struct cifs_tcon *tcon)
>         struct cifs_sb_info *cifs_sb = CIFS_SB(direntry->d_sb);
>         int i;
>
> -       if (unlikely(direntry->d_name.len >
> +       if (unlikely(tcon->fsAttrInfo.MaxPathNameComponentLength &&
> +                    direntry->d_name.len >
>                      le32_to_cpu(tcon->fsAttrInfo.MaxPathNameComponentLength)))
>                 return -ENAMETOOLONG;
>
> @@ -520,7 +521,7 @@ cifs_atomic_open(struct inode *inode, struct dentry *direntry,
>
>         rc = check_name(direntry, tcon);
>         if (rc)
> -               goto out_free_xid;
> +               goto out;
>
>         server = tcon->ses->server;
>
> --
> 2.13.3
>

Patch

diff --git a/fs/cifs/dir.c b/fs/cifs/dir.c
index e702d48bd023..81ba6e0d88d8 100644
--- a/fs/cifs/dir.c
+++ b/fs/cifs/dir.c
@@ -204,7 +204,8 @@  check_name(struct dentry *direntry, struct cifs_tcon *tcon)
 	struct cifs_sb_info *cifs_sb = CIFS_SB(direntry->d_sb);
 	int i;
 
-	if (unlikely(direntry->d_name.len >
+	if (unlikely(tcon->fsAttrInfo.MaxPathNameComponentLength &&
+		     direntry->d_name.len >
 		     le32_to_cpu(tcon->fsAttrInfo.MaxPathNameComponentLength)))
 		return -ENAMETOOLONG;
 
@@ -520,7 +521,7 @@  cifs_atomic_open(struct inode *inode, struct dentry *direntry,
 
 	rc = check_name(direntry, tcon);
 	if (rc)
-		goto out_free_xid;
+		goto out;
 
 	server = tcon->ses->server;