* 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