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.
This commit is contained in:
Paul Eggert
2025-11-09 11:12:13 -08:00
parent 238250f19e
commit 8fca2d35e8
2 changed files with 10 additions and 2 deletions

5
NEWS
View File

@@ -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 <bug-tar@gnu.org>
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.

View File

@@ -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;