This is an automated email from the git hooks/post-receive script. sthibault pushed a commit to branch sid in repository glibc.
commit 5832eb4ba62b6ad9b9c488801e68119346e3f800 Author: Samuel Thibault <[email protected]> Date: Wed Nov 23 00:56:57 2016 +0100 hurd-i386/tg-NOFOLLOW.diff: New patch to fix O_NOFOLLOW errors --- debian/changelog | 1 + debian/patches/hurd-i386/tg-NOFOLLOW.diff | 73 +++++++++++++++++++++++++++++++ debian/patches/series | 1 + 3 files changed, 75 insertions(+) diff --git a/debian/changelog b/debian/changelog index a1c3a85..478f46b 100644 --- a/debian/changelog +++ b/debian/changelog @@ -5,6 +5,7 @@ glibc (2.24-7) UNRELEASED; urgency=medium handlers. * hurd-i386/tg-libpthread-gsync-mutex.diff: New patch to make mutexes use gsync too. + * hurd-i386/tg-NOFOLLOW.diff: New patch to fix O_NOFOLLOW errors. -- Aurelien Jarno <[email protected]> Mon, 21 Nov 2016 19:24:59 +0100 diff --git a/debian/patches/hurd-i386/tg-NOFOLLOW.diff b/debian/patches/hurd-i386/tg-NOFOLLOW.diff new file mode 100644 index 0000000..a16e6f4 --- /dev/null +++ b/debian/patches/hurd-i386/tg-NOFOLLOW.diff @@ -0,0 +1,73 @@ +From: Samuel Thibault <[email protected]> +Subject: [PATCH] hurd: Fix O_NOFOLLOW + +The error code documented by POSIX for opening a symlink with O_NOFOLLOW +is ELOOP. + +Also, if the translator does not expose symlink as a symlink translator but +as a S_IFLNK file, O_NOFOLLOW needs to return ELOOP too. + +Signed-off-by: Samuel Thibault <[email protected]> + +--- + hurd/lookup-retry.c | 36 ++++++++++++++++++++---------------- + 1 file changed, 20 insertions(+), 16 deletions(-) + +diff --git a/hurd/lookup-retry.c b/hurd/lookup-retry.c +index aee2ba8..b7a6a2b 100644 +--- a/hurd/lookup-retry.c ++++ b/hurd/lookup-retry.c +@@ -127,7 +127,7 @@ __hurd_file_name_lookup_retry (error_t (*use_init_port) + { + /* In Linux, O_NOFOLLOW means to reject symlinks. If we + did an O_NOLINK lookup above and io_stat here to check +- for S_IFLNK, a translator like firmlink could easily ++ for S_IFLNK only, a translator like firmlink could easily + spoof this check by not showing S_IFLNK, but in fact + redirecting the lookup to some other name + (i.e. opening the very same holes a symlink would). +@@ -145,23 +145,27 @@ __hurd_file_name_lookup_retry (error_t (*use_init_port) + one exception to our general translator-based rule. */ + struct stat64 st; + err = __io_stat (*result, &st); +- if (!err +- && (st.st_mode & (S_IPTRANS|S_IATRANS))) ++ if (!err) + { +- if (st.st_uid != 0) +- err = ENOENT; +- else if (st.st_mode & S_IPTRANS) ++ if (S_ISLNK(st.st_mode)) ++ err = ELOOP; ++ else if (st.st_mode & (S_IPTRANS|S_IATRANS)) + { +- char buf[1024]; +- char *trans = buf; +- size_t translen = sizeof buf; +- err = __file_get_translator (*result, +- &trans, &translen); +- if (!err +- && translen > sizeof _HURD_SYMLINK +- && !memcmp (trans, +- _HURD_SYMLINK, sizeof _HURD_SYMLINK)) +- err = ENOENT; ++ if (st.st_uid != 0) ++ err = ELOOP; ++ else if (st.st_mode & S_IPTRANS) ++ { ++ char buf[1024]; ++ char *trans = buf; ++ size_t translen = sizeof buf; ++ err = __file_get_translator (*result, ++ &trans, &translen); ++ if (!err ++ && translen > sizeof _HURD_SYMLINK ++ && !memcmp (trans, ++ _HURD_SYMLINK, sizeof _HURD_SYMLINK)) ++ err = ELOOP; ++ } + } + } + } +-- +tg: (7bb5f8a..) t/NOFOLLOW (depends on: baseline) diff --git a/debian/patches/series b/debian/patches/series index 2575eea..575ca65 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -136,6 +136,7 @@ hurd-i386/cvs-mallocfork.diff hurd-i386/tg-libpthread-gsync-spin.diff hurd-i386/tg-ONSTACK.diff hurd-i386/tg-libpthread-gsync-mutex.diff +hurd-i386/tg-NOFOLLOW.diff i386/local-biarch.diff i386/local-cmov.diff -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-glibc/glibc.git

