* Re: [LTP] [Bugme-new] [Bug 15909] New: open("a/", O_NOFOLLOW) fails with ELOOP if "a" is a symbolic link to a directory.
[not found] ` <20100511154850.GC2832@quack.suse.cz>
@ 2010-05-11 16:24 ` Jan Kara
2010-05-11 16:35 ` Subrata Modak
0 siblings, 1 reply; 2+ messages in thread
From: Jan Kara @ 2010-05-11 16:24 UTC (permalink / raw)
To: ltp-list
Cc: tolzmann, bugzilla-daemon, Al Viro, bugme-daemon, linux-fsdevel,
Andrew Morton, Christoph Hellwig
[-- Attachment #1: Type: text/plain, Size: 2474 bytes --]
On Tue 11-05-10 17:48:51, Jan Kara wrote:
> On Thu 06-05-10 14:30:02, Andrew Morton wrote:
> >
> > (switched to email. Please respond via emailed reply-to-all, not via the
> > bugzilla web interface).
> >
> > On Wed, 5 May 2010 13:01:22 GMT
> > bugzilla-daemon@bugzilla.kernel.org wrote:
> >
> > > https://bugzilla.kernel.org/show_bug.cgi?id=15909
> > >
> > > Summary: open("a/",O_NOFOLLOW) fails with ELOOP if "a" is a
> > > symbolic link to a directory.
> > > Product: File System
> > > Version: 2.5
> > > Kernel Version: 2.6.34-rc6
> > > Platform: All
> > > OS/Version: Linux
> > > Tree: Mainline
> > > Status: NEW
> > > Severity: high
> > > Priority: P1
> > > Component: Other
> > > AssignedTo: fs_other@kernel-bugs.osdl.org
> > > ReportedBy: tolzmann@molgen.mpg.de
> > > Regression: No
> > >
> > >
> > > mkdir c
> > > ln -s c a
> > >
> > > f=open("a/",O_RDONLY+O_NOFOLLOW)
> > >
> > > fails with ELOOP. However, this open should behave like open("a/.") not like
> > > open("a") according to path_resolution(7). In kernel version 2.6.32 the open
> > > worked as documented.
> > >
> > > On a higher level this bug makes
> > >
> > > find a/
> > >
> > > to fail.
> > >
> >
> > It sounds like this 2.6.32->2.6.34-rc6 regression could have pretty
> > serious ramifications for some users. Does anyone know whcih commit
> > might have caused it?
> The patch below fixes the issue for me but someone should have a look
> at it because I'm not really an expert in that code and the code paths are so
> twisted that my mind is currently tied into a knot ;).
>
> Honza
> ---
>
> From d53d3cc6488d9135bb69c3ff7e034b3b624866ed Mon Sep 17 00:00:00 2001
> From: Jan Kara <jack@suse.cz>
> Date: Tue, 11 May 2010 16:34:25 +0200
> Subject: [PATCH] vfs: Fix O_NOFOLLOW behavior for paths with trailing slashes
>
> According to specification
> mkdir d; ln -s d a; open("a/", O_NOFOLLOW | O_RDONLY)
> should return success but currently it did return ELOOP. Fix the code to ignore
> O_NOFOLLOW in case the provided path has trailing slashes. This is a regression
> caused by path lookup cleanup patch series.
>
> CC: stable@kernel.org
> Signed-off-by: Jan Kara <jack@suse.cz>
...
BTW: It might be worthwhile to add the attached testcase to LTP?
Honza
--
Jan Kara <jack@suse.cz>
SUSE Labs, CR
[-- Attachment #2: open-follow-test.c --]
[-- Type: text/x-c++src, Size: 991 bytes --]
#define _GNU_SOURCE
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
#include <string.h>
#include <sys/stat.h>
#include <sys/types.h>
int do_test(char *p)
{
int err;
char path[16];
strcpy(path, p);
err = open(path, O_NOFOLLOW | O_RDONLY);
if (err >= 0) {
fprintf(stderr, "open(\"%s\", O_NOFOLLOW | O_RDONLY) did not fail!\n", path);
return 1;
}
strcat(path, "/");
err = open(path, O_NOFOLLOW | O_RDONLY);
if (err < 0) {
fprintf(stderr, "open(\"%s\", O_NOFOLLOW | O_RDONLY) failed with %d\n", path, errno);
return 1;
}
strcat(path, ".");
err = open(path, O_NOFOLLOW | O_RDONLY);
if (err < 0) {
fprintf(stderr, "open(\"%s\", O_NOFOLLOW | O_RDONLY) failed with %d\n", path, errno);
return 1;
}
return 0;
}
int main(void)
{
if (mkdir("d", 0700) < 0) {
perror("mkdir");
return 1;
}
if (symlink("d", "a") < 0) {
perror("link");
return 1;
}
if (do_test("a"))
return 1;
return 0;
}
[-- Attachment #3: Type: text/plain, Size: 80 bytes --]
------------------------------------------------------------------------------
[-- Attachment #4: Type: text/plain, Size: 155 bytes --]
_______________________________________________
Ltp-list mailing list
Ltp-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ltp-list
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [LTP] [Bugme-new] [Bug 15909] New: open("a/", O_NOFOLLOW) fails with ELOOP if "a" is a symbolic link to a directory.
2010-05-11 16:24 ` [LTP] [Bugme-new] [Bug 15909] New: open("a/", O_NOFOLLOW) fails with ELOOP if "a" is a symbolic link to a directory Jan Kara
@ 2010-05-11 16:35 ` Subrata Modak
0 siblings, 0 replies; 2+ messages in thread
From: Subrata Modak @ 2010-05-11 16:35 UTC (permalink / raw)
To: Jan Kara
Cc: tolzmann, ltp-list, bugzilla-daemon, Al Viro, bugme-daemon,
linux-fsdevel, Andrew Morton, Christoph Hellwig
Hi Jan,
On Tue, 2010-05-11 at 18:24 +0200, Jan Kara wrote:
> On Tue 11-05-10 17:48:51, Jan Kara wrote:
> > On Thu 06-05-10 14:30:02, Andrew Morton wrote:
> > >
> > > (switched to email. Please respond via emailed reply-to-all, not
> via the
> > > bugzilla web interface).
> > >
> > > On Wed, 5 May 2010 13:01:22 GMT
> > > bugzilla-daemon@bugzilla.kernel.org wrote:
> > >
> > > > https://bugzilla.kernel.org/show_bug.cgi?id=15909
> > > >
> > > > Summary: open("a/",O_NOFOLLOW) fails with ELOOP if
> "a" is a
> > > > symbolic link to a directory.
> > > > Product: File System
> > > > Version: 2.5
> > > > Kernel Version: 2.6.34-rc6
> > > > Platform: All
> > > > OS/Version: Linux
> > > > Tree: Mainline
> > > > Status: NEW
> > > > Severity: high
> > > > Priority: P1
> > > > Component: Other
> > > > AssignedTo: fs_other@kernel-bugs.osdl.org
> > > > ReportedBy: tolzmann@molgen.mpg.de
> > > > Regression: No
> > > >
> > > >
> > > > mkdir c
> > > > ln -s c a
> > > >
> > > > f=open("a/",O_RDONLY+O_NOFOLLOW)
> > > >
> > > > fails with ELOOP. However, this open should behave like
> open("a/.") not like
> > > > open("a") according to path_resolution(7). In kernel version
> 2.6.32 the open
> > > > worked as documented.
> > > >
> > > > On a higher level this bug makes
> > > >
> > > > find a/
> > > >
> > > > to fail.
> > > >
> > >
> > > It sounds like this 2.6.32->2.6.34-rc6 regression could have
> pretty
> > > serious ramifications for some users. Does anyone know whcih
> commit
> > > might have caused it?
> > The patch below fixes the issue for me but someone should have a
> look
> > at it because I'm not really an expert in that code and the code
> paths are so
> > twisted that my mind is currently tied into a knot ;).
> >
> > Honza
> > ---
> >
> > From d53d3cc6488d9135bb69c3ff7e034b3b624866ed Mon Sep 17 00:00:00
> 2001
> > From: Jan Kara <jack@suse.cz>
> > Date: Tue, 11 May 2010 16:34:25 +0200
> > Subject: [PATCH] vfs: Fix O_NOFOLLOW behavior for paths with
> trailing slashes
> >
> > According to specification
> > mkdir d; ln -s d a; open("a/", O_NOFOLLOW | O_RDONLY)
> > should return success but currently it did return ELOOP. Fix the
> code to ignore
> > O_NOFOLLOW in case the provided path has trailing slashes. This is a
> regression
> > caused by path lookup cleanup patch series.
> >
> > CC: stable@kernel.org
> > Signed-off-by: Jan Kara <jack@suse.cz>
> ...
> BTW: It might be worthwhile to add the attached testcase to LTP?
It would be great if you can shoot it in the form of a patch, mentioning
1. The GPL Lincense,
2. The purpose of the test case,
3. Exact location it goes,
4. Which LTPROOT/runtest/<file> executes it
Regards--
Subrata
:-)
>
> Honza
> --
> Jan Kara <jack@suse.cz>
> SUSE Labs, CR
>
>
>
>
>
>
>
> C++ source code
> attachment
> (open-follow-test.c)
>
> #define _GNU_SOURCE
> #include <stdio.h>
> #include <unistd.h>
> #include <fcntl.h>
> #include <errno.h>
> #include <string.h>
> #include <sys/stat.h>
> #include <sys/types.h>
>
> int do_test(char *p)
> {
> int err;
> char path[16];
>
> strcpy(path, p);
> err = open(path, O_NOFOLLOW | O_RDONLY);
> if (err >= 0) {
> fprintf(stderr, "open(\"%s\", O_NOFOLLOW | O_RDONLY) did not fail!
> \n", path);
> return 1;
> }
> strcat(path, "/");
> err = open(path, O_NOFOLLOW | O_RDONLY);
> if (err < 0) {
> fprintf(stderr, "open(\"%s\", O_NOFOLLOW | O_RDONLY) failed with %
> d\n", path, errno);
> return 1;
> }
> strcat(path, ".");
> err = open(path, O_NOFOLLOW | O_RDONLY);
> if (err < 0) {
> fprintf(stderr, "open(\"%s\", O_NOFOLLOW | O_RDONLY) failed with %
> d\n", path, errno);
> return 1;
> }
> return 0;
> }
>
> int main(void)
> {
> if (mkdir("d", 0700) < 0) {
> perror("mkdir");
> return 1;
> }
> if (symlink("d", "a") < 0) {
> perror("link");
> return 1;
> }
> if (do_test("a"))
> return 1;
> return 0;
> }
------------------------------------------------------------------------------
_______________________________________________
Ltp-list mailing list
Ltp-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ltp-list
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2010-05-11 16:36 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <bug-15909-10286@https.bugzilla.kernel.org/>
[not found] ` <20100506143002.0381501b.akpm@linux-foundation.org>
[not found] ` <20100511154850.GC2832@quack.suse.cz>
2010-05-11 16:24 ` [LTP] [Bugme-new] [Bug 15909] New: open("a/", O_NOFOLLOW) fails with ELOOP if "a" is a symbolic link to a directory Jan Kara
2010-05-11 16:35 ` Subrata Modak
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox