The Samba-Bugzilla – Attachment 5992 Details for
Bug 7535
Server directory without execute (or list_directory) privileges results in empty directory rathere than access denied
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Proposed patch
cifs-handle-findfirst-failure (text/plain), 2.04 KB, created by
Suresh Jayaraman (mail address is dead)
on 2010-10-01 10:56:20 UTC
(
hide
)
Description:
Proposed patch
Filename:
MIME Type:
Creator:
Suresh Jayaraman (mail address is dead)
Created:
2010-10-01 10:56:20 UTC
Size:
2.04 KB
patch
obsolete
>From: Suresh Jayaraman <sjayaraman@suse.de> >Subject: [PATCH] cifs: handle FindFirst failure gracefully > >FindFirst failure due to permission errors or any other errors are silently >ignored by cifs_readdir(). This could cause problem to applications that depend >on the error to do further processing. > >Reproducer: > - mount a cifs share > - mkdir tdir;touch tdir/1 tdir/2 tdir/3 > - chmod -x tdir > - ls tdir > >Currently, we start calling filldir() for '.' and '..' before we know we >whether FindFirst could succeed or not. If FindFirst fails later, there is no >way to notify VFS by setting buf.error and so VFS won't be able to catch this. >Fix this by moving the call to initiate_cifs_search() before we start doing >filldir(). > >This fixes https://bugzilla.samba.org/show_bug.cgi?id=7535 > >Reported-by: Tom Dexter <digitalaudiorock@gmail.com> >Signed-off-by: Suresh Jayaraman <sjayaraman@suse.de> >--- > fs/cifs/readdir.c | 19 +++++++++++-------- > 1 files changed, 11 insertions(+), 8 deletions(-) > >diff --git a/fs/cifs/readdir.c b/fs/cifs/readdir.c >index 887a7e2..edb69a9 100644 >--- a/fs/cifs/readdir.c >+++ b/fs/cifs/readdir.c >@@ -786,6 +786,17 @@ int cifs_readdir(struct file *file, void *direntry, filldir_t filldir) > > cifs_sb = CIFS_SB(file->f_path.dentry->d_sb); > >+ /* >+ * Ensure FindFirst doesn't fail before doing filldir() for '.' and >+ * '..'. Otherwise we won't be able to notify VFS in case of failure. >+ */ >+ if (file->private_data == NULL) { >+ rc = initiate_cifs_search(xid, file); >+ cFYI(1, "initiate cifs search rc %d", rc); >+ if (rc) >+ goto rddir2_exit; >+ } >+ > switch ((int) file->f_pos) { > case 0: > if (filldir(direntry, ".", 1, file->f_pos, >@@ -810,14 +821,6 @@ int cifs_readdir(struct file *file, void *direntry, filldir_t filldir) > if after then keep searching till find it */ > > if (file->private_data == NULL) { >- rc = initiate_cifs_search(xid, file); >- cFYI(1, "initiate cifs search rc %d", rc); >- if (rc) { >- FreeXid(xid); >- return rc; >- } >- } >- if (file->private_data == NULL) { > rc = -EINVAL; > FreeXid(xid); > return rc;
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Raw
Actions:
View
Attachments on
bug 7535
: 5992