From d9852bd5b76ca65f283929e803b87343942ecb1f Mon Sep 17 00:00:00 2001 From: Konstantin Demin Date: Tue, 1 Jul 2025 14:35:36 +0200 Subject: setproject: fix openat() call It looks like that openat() call was copy-pasted from above fstatat() call. However, manpage for openat() doesn't mention AT_SYMLINK_NOFOLLOW. Furthermore, AT_SYMLINK_NOFOLLOW constant value (0x100) sometimes (!) clashes with O_CREAT constant value which is defined as 0100 (0x40) OR 0x100 (yes, two different values for the same constant appear in headers). This produces build errors when fortifying defines (-D_FORTIFY_SOURCE) are in effect (e.g. with glibc 2.41). In order to keep correct behavior, use O_NOFOLLOW instead of AT_SYMLINK_NOFOLLOW. Fixes: e61d46c65899ced9599c93a6128f19d8759fcad8 Signed-off-by: Konstantin Demin Signed-off-by: Jan Kara --- setproject.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) --- a/setproject.c +++ b/setproject.c @@ -73,7 +73,7 @@ static void setproject_recurse(int dirfd if (!S_ISDIR(st.st_mode) && !S_ISREG(st.st_mode)) continue; - int fd = openat(dirfd, d->d_name, AT_SYMLINK_NOFOLLOW); + int fd = openat(dirfd, d->d_name, O_NOFOLLOW); if (fd < 0) { errstr(_("error opening %s: %m"), d->d_name); errno = 0;