From 72103e73c9a76784b9e8b27a7d5b802178d6755b Mon Sep 17 00:00:00 2001 From: Samuel Thibault Date: Sun, 18 Mar 2018 19:43:04 +0100 Subject: hurd: Fix O_DIRECTORY | O_NOFOLLOW Appending / to the path to be looked up would make us always follow a final symlink, even with O_NOTRANS (since the final resolution is after the '/'). In the O_DIRECTORY | O_NOFOLLOW case, we thus have to really open the node and stat it, which we already do anyway, and check for directory type. * hurd/hurdlookup.c (__hurd_file_name_lookup): Do not append '/' to path when flags contains O_NOFOLLOW. * hurd/lookup-retry.c (__hurd_file_name_lookup_retry): Return ENOTDIR if flags contains O_DIRECTORY and the result is a directory. --- ChangeLog | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'ChangeLog') diff --git a/ChangeLog b/ChangeLog index 82ddda54ba..a02f9017de 100644 --- a/ChangeLog +++ b/ChangeLog @@ -64,6 +64,10 @@ * sysdeps/mach/hurd/cthreads.c: Include . * hurd/lookup-retry.c (__hurd_file_name_lookup_retry): Return ELOOP when opening a symlink with O_NOFOLLOW. + * hurd/hurdlookup.c (__hurd_file_name_lookup): Do not append '/' to + path when flags contains O_NOFOLLOW. + * hurd/lookup-retry.c (__hurd_file_name_lookup_retry): Return ENOTDIR + if flags contains O_DIRECTORY and the result is a directory. 2018-03-17 Samuel Thibault -- cgit 1.4.1