0
0
mirror of https://github.com/openwrt/packages.git synced 2025-08-23 05:12:23 +00:00
Files
packages/utils/quota/patches/001-setproject-fix-openat-call.patch
Konstantin Demin b7d4d32d8f quota: fix setproject binary
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>
2025-07-08 08:42:22 +02:00

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;