From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jan Kara Subject: Re: [Bugme-new] [Bug 15909] New: open("a/", O_NOFOLLOW) fails with ELOOP if "a" is a symbolic link to a directory. Date: Tue, 11 May 2010 18:24:52 +0200 Message-ID: <20100511162452.GD2832@quack.suse.cz> References: <20100506143002.0381501b.akpm@linux-foundation.org> <20100511154850.GC2832@quack.suse.cz> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="MW5yreqqjyrRcusr" Cc: tolzmann-KUpvgZVWgV9o1qOY/usvUg@public.gmane.org, bugzilla-daemon-590EEB7GvNiWaY/ihj7yzEB+6BGkLq7r@public.gmane.org, Al Viro , bugme-daemon-590EEB7GvNiWaY/ihj7yzEB+6BGkLq7r@public.gmane.org, linux-fsdevel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, Andrew Morton , Christoph Hellwig To: ltp-list-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org Return-path: Content-Disposition: inline In-Reply-To: <20100511154850.GC2832-+0h/O2h83AeN3ZZ/Hiejyg@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: ltp-list-bounces-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org List-Id: linux-fsdevel.vger.kernel.org --MW5yreqqjyrRcusr Content-Type: text/plain; charset=us-ascii Content-Disposition: inline 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-590EEB7GvNiWaY/ihj7yzEB+6BGkLq7r@public.gmane.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-ztI5WcYan/vQLgFONoPN62D2FQJk+8+b@public.gmane.org > > > ReportedBy: tolzmann-KUpvgZVWgV9o1qOY/usvUg@public.gmane.org > > > 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 > 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-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org > Signed-off-by: Jan Kara ... BTW: It might be worthwhile to add the attached testcase to LTP? Honza -- Jan Kara SUSE Labs, CR --MW5yreqqjyrRcusr Content-Type: text/x-c++src; charset=us-ascii Content-Disposition: attachment; filename="open-follow-test.c" #define _GNU_SOURCE #include #include #include #include #include #include #include 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; } --MW5yreqqjyrRcusr Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline ------------------------------------------------------------------------------ --MW5yreqqjyrRcusr Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Ltp-list mailing list Ltp-list-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org https://lists.sourceforge.net/lists/listinfo/ltp-list --MW5yreqqjyrRcusr--