[Bug 272127] fdescfs with linkrdlnk fails openat with O_DIRECTORY unless "ls -l" done in fdescfs dir first...
- Reply: bugzilla-noreply_a_freebsd.org: "[Bug 272127] fdescfs with linkrdlnk fails openat with O_DIRECTORY unless "ls -l" done in fdescfs dir first..."
- Reply: bugzilla-noreply_a_freebsd.org: "[Bug 272127] fdescfs with linkrdlnk fails openat with O_DIRECTORY unless "ls -l" done in fdescfs dir first..."
- Reply: bugzilla-noreply_a_freebsd.org: "[Bug 272127] fdescfs with linkrdlnk fails openat with O_DIRECTORY unless "ls -l" done in fdescfs dir first..."
- Reply: bugzilla-noreply_a_freebsd.org: "[Bug 272127] fdescfs with linkrdlnk fails openat with O_DIRECTORY unless "ls -l" done in fdescfs dir first..."
- Reply: bugzilla-noreply_a_freebsd.org: "[Bug 272127] fdescfs with linkrdlnk fails openat with O_DIRECTORY unless "ls -l" done in fdescfs dir first..."
- Reply: bugzilla-noreply_a_freebsd.org: "[Bug 272127] fdescfs with linkrdlnk fails openat with O_DIRECTORY unless "ls -l" done in fdescfs dir first..."
- Reply: bugzilla-noreply_a_freebsd.org: "[Bug 272127] fdescfs with linkrdlnk fails openat with O_DIRECTORY unless "ls -l" done in fdescfs dir first..."
- Reply: bugzilla-noreply_a_freebsd.org: "[Bug 272127] fdescfs with linkrdlnk fails openat with O_DIRECTORY unless "ls -l" done in fdescfs dir first..."
- Reply: bugzilla-noreply_a_freebsd.org: "[Bug 272127] fdescfs with linkrdlnk fails openat with O_DIRECTORY unless "ls -l" done in fdescfs dir first..."
- Reply: bugzilla-noreply_a_freebsd.org: "[Bug 272127] fdescfs with linkrdlnk fails openat with O_DIRECTORY unless "ls -l" done in fdescfs dir first..."
- Reply: bugzilla-noreply_a_freebsd.org: "[Bug 272127] fdescfs with linkrdlnk fails openat with O_DIRECTORY unless "ls -l" done in fdescfs dir first..."
- Reply: bugzilla-noreply_a_freebsd.org: "[Bug 272127] fdescfs with linkrdlnk fails openat with O_DIRECTORY unless "ls -l" done in fdescfs dir first..."
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Wed, 21 Jun 2023 08:17:09 UTC
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=272127 Bug ID: 272127 Summary: fdescfs with linkrdlnk fails openat with O_DIRECTORY unless "ls -l" done in fdescfs dir first... Product: Base System Version: 13.2-RELEASE Hardware: Any OS: Any Status: New Severity: Affects Some People Priority: --- Component: kern Assignee: bugs@FreeBSD.org Reporter: pen@lysator.liu.se Seems like the kernel doesn't follow the fdescfs symlink when checking if the target points to a directory for openat (and open) with the O_DIRECTORY flag. Unless you've primed it with an "ls -l" in the directory (or something similar that does a stat() call). Then it starts to work. To "reset" - unmount and remount the fdescfs filesystem again (Thought I was going insane when debugging a problem with Samba 4.18 and Samba failed but my test program worked. Turned out my test program was doing a stat() call before attempting this which primed the cache...) root@runur00:~ # egrep compat /etc/fstab none /compat/linux/dev/fd fdescfs rw,linrdlnk 0 root@runur00:~ # ./t ./t: openat(AT_FDCWD, "/compat/linux/dev/fd/3", O_DIRECTORY, 0): Not a directory root@runur00:~ # ls /compat/linux/dev/fd/ 0 1 2 3 4 root@runur00:~ # ./t ./t: openat(AT_FDCWD, "/compat/linux/dev/fd/3", O_DIRECTORY, 0): Not a directory root@runur00:~ # ls -l /compat/linux/dev/fd/ total 0 lr-xr-xr-x 1 root wheel 0 Jun 20 15:57 0 -> /dev/pts/0 lr-xr-xr-x 1 root wheel 0 Jun 20 15:57 1 -> /dev/pts/0 lr-xr-xr-x 1 root wheel 0 Jun 20 15:57 2 -> /dev/pts/0 lr-xr-xr-x 1 root wheel 0 Jun 20 15:57 3 -> /root lr-xr-xr-x 1 root wheel 0 Jun 20 15:57 4 -> /etc/spwd.db root@runur00:~ # ./t /compat/linux/dev/fd/3: OK root@runur00:~ # umount /compat/linux/dev/fd root@runur00:~ # mount /compat/linux/dev/fd root@runur00:~ # ./t ./t: openat(AT_FDCWD, "/compat/linux/dev/fd/3", O_DIRECTORY, 0): Not a directory Test program: #include <stdio.h> #include <stdlib.h> #include <stdarg.h> #include <string.h> #include <unistd.h> #include <errno.h> #include <fcntl.h> int main(int argc, char *argv[]) { int dfd, tfd; char buf[2048]; dfd = open(".", O_PATH); sprintf(buf, "/compat/linux/dev/fd/%d", dfd); tfd = openat(AT_FDCWD, buf, O_DIRECTORY, 0); if (tfd < 0) { fprintf(stderr, "%s: openat(AT_FDCWD, \"%s\", O_DIRECTORY, 0): %s\n", argv[0], buf, strerror(errno)); exit(1); } printf("%s: OK\n", buf); exit(0); } -- You are receiving this mail because: You are the assignee for the bug.