mirror of
https://github.com/openwrt/packages.git
synced 2025-08-23 05:12:23 +00:00
This patch fixes both a wrong openat() call and a build failure when using glibc 2.41 in OpenWrt. Backported upstream commit d9852bd5b76ca65f283929e803b87343942ecb1f Signed-off-by: Konstantin Demin <rockdrilla@gmail.com>
33 lines
1.3 KiB
Diff
33 lines
1.3 KiB
Diff
From d9852bd5b76ca65f283929e803b87343942ecb1f Mon Sep 17 00:00:00 2001
|
|
From: Konstantin Demin <rockdrilla@gmail.com>
|
|
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 <rockdrilla@gmail.com>
|
|
Signed-off-by: Jan Kara <jack@suse.cz>
|
|
---
|
|
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;
|