From b7d4d32d8f0e9f7e1d5b177ee1ae26b00397f30b Mon Sep 17 00:00:00 2001 From: Konstantin Demin Date: Mon, 7 Jul 2025 11:04:07 +0300 Subject: [PATCH] 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 --- utils/quota/Makefile | 2 +- .../001-setproject-fix-openat-call.patch | 32 +++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 utils/quota/patches/001-setproject-fix-openat-call.patch diff --git a/utils/quota/Makefile b/utils/quota/Makefile index 04ee314ad0..49bea64df2 100644 --- a/utils/quota/Makefile +++ b/utils/quota/Makefile @@ -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 diff --git a/utils/quota/patches/001-setproject-fix-openat-call.patch b/utils/quota/patches/001-setproject-fix-openat-call.patch new file mode 100644 index 0000000000..cbb79d5eed --- /dev/null +++ b/utils/quota/patches/001-setproject-fix-openat-call.patch @@ -0,0 +1,32 @@ +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; -- 2.30.2