mirror of
https://github.com/openwrt/packages.git
synced 2025-12-10 12:41:22 +00:00
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>
This commit is contained in:
committed by
Josef Schlehofer
parent
3413d5bd9c
commit
b7d4d32d8f
@@ -7,7 +7,7 @@ include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=quota
|
||||
PKG_VERSION:=4.10
|
||||
PKG_RELEASE:=2
|
||||
PKG_RELEASE:=3
|
||||
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
||||
PKG_SOURCE_URL:=@SF/linuxquota
|
||||
|
||||
32
utils/quota/patches/001-setproject-fix-openat-call.patch
Normal file
32
utils/quota/patches/001-setproject-fix-openat-call.patch
Normal file
@@ -0,0 +1,32 @@
|
||||
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;
|
||||
Reference in New Issue
Block a user