From: Paul Eggert Date: Sun, 9 Nov 2025 19:12:13 +0000 (-0800) Subject: Prefer O_PATH to O_SEARCH on Linux kernels X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8fca2d35e88d10f0ddcb36720e88f40ac57f67f0;p=thirdparty%2Ftar.git Prefer O_PATH to O_SEARCH on Linux kernels * src/tar.c (decode_options): Prefer O_PATH to an O_SEARCH that is actually O_RDONLY. --- diff --git a/NEWS b/NEWS index 4a216758..866edcee 100644 --- a/NEWS +++ b/NEWS @@ -1,4 +1,4 @@ -GNU tar NEWS - User visible changes. 2025-10-19 +GNU tar NEWS - User visible changes. 2025-11-09 Please send GNU tar bug reports to version 1.35.90 (git) @@ -49,6 +49,9 @@ option. not even temporarily. This matches the documentation better and avoids some permissions glitches. +** tar no longer fails merely if an extraction directory is unreadable + on Linux kernels. + ** tar now works better in strict debugging environments that do not allow pointer arithmetic to escape from a sub-element of an array. diff --git a/src/tar.c b/src/tar.c index 9be0d7f0..0911a9e1 100644 --- a/src/tar.c +++ b/src/tar.c @@ -2701,7 +2701,12 @@ decode_options (int argc, char **argv) | (dereference_option ? 0 : O_NOFOLLOW) | (atime_preserve_option == system_atime_preserve ? O_NOATIME : 0)); open_read_flags = O_RDONLY | base_open_flags; - open_searchdir_flags = O_SEARCH | O_DIRECTORY | base_open_flags; +#if defined O_PATH && O_SEARCH == O_RDONLY + int open_search_flag = O_PATH; +#else + int open_search_flag = O_SEARCH; +#endif + open_searchdir_flags = open_search_flag | O_DIRECTORY | base_open_flags; } fstatat_flags = dereference_option ? 0 : AT_SYMLINK_NOFOLLOW;