cifs: return ENAMETOOLONG for overlong names in cifs_open()/cifs_lookup()
commit d3edede29f upstream.
Add checking for the path component length and verify it is <= the maximum
that the server advertizes via FileFsAttributeInformation.
With this patch cifs.ko will now return ENAMETOOLONG instead of ENOENT
when users to access an overlong path.
To test this, try to cd into a (non-existing) directory on a CIFS share
that has a too long name:
cd /mnt/aaaaaaaaaaaaaaa...
and it now should show a good error message from the shell:
bash: cd: /mnt/aaaaaaaaaaaaaaaa...aaaaaa: File name too long
rh bz 1153996
Signed-off-by: Ronnie Sahlberg <lsahlber@redhat.com>
Signed-off-by: Steve French <smfrench@gmail.com>
[bwh: Backported to 3.2: name checks are done only in cifs_lookup()]
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
This commit is contained in:
committed by
Ben Hutchings
parent
88658a57f0
commit
ae91ea20bd
@ -520,6 +520,13 @@ cifs_lookup(struct inode *parent_dir_inode, struct dentry *direntry,
|
||||
|
||||
oplock = pTcon->ses->server->oplocks ? REQ_OPLOCK : 0;
|
||||
|
||||
/* Don't allow path components longer than the server max. */
|
||||
if (unlikely(direntry->d_name.len >
|
||||
pTcon->fsAttrInfo.MaxPathNameComponentLength)) {
|
||||
rc = -ENAMETOOLONG;
|
||||
goto lookup_out;
|
||||
}
|
||||
|
||||
/*
|
||||
* Don't allow the separator character in a path component.
|
||||
* The VFS will not allow "/", but "\" is allowed by posix.
|
||||
|
||||
Reference in New Issue
Block a user