Buildroot Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [Buildroot] [PATCH] package/e2fsprogs: fix build with headers >= 5.10 and < 5.12
@ 2025-11-23 13:34 Thomas Petazzoni via buildroot
  2025-11-23 14:16 ` Julien Olivain via buildroot
  0 siblings, 1 reply; 7+ messages in thread
From: Thomas Petazzoni via buildroot @ 2025-11-23 13:34 UTC (permalink / raw)
  To: Buildroot List; +Cc: Bernd Kuhls, Thomas Petazzoni

The bump of e2fsprogs to 1.47.3 in Buildroot commit
bb004ddba26ea86687d917fa16d313ea92aff41c causes the package to fail
building when the kernel headers are >= 5.10 but < 5.12.

Indeed the new version of e2fsprogs detects the presence of
<linux/fsverity.h> (which occurred in 5.10), and when it's available,
enables some fsverity functionality, which uses an ioctl() that was
only introduced in 5.12. This causes some build breakage if the
headers used are 5.10 or 5.11.

We fix this by introducing a patch, submitted upstream, that not only
verifies the availability of the header file, but also the
availability of the ioctl().

Fixes:

  https://autobuild.buildroot.net/results/c573233b1f871c61f916eda9c402c84070902432/ (host-e2fsprogs)
  https://autobuild.buildroot.net/results/0ed16cad1d1f500d0e577d03166c06381be73ffc/ (e2fsprogs)

Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
---
 ...ck-for-FS_IOC_READ_VERITY_METADATA-a.patch | 103 ++++++++++++++++++
 package/e2fsprogs/e2fsprogs.mk                |   7 ++
 2 files changed, 110 insertions(+)
 create mode 100644 package/e2fsprogs/0001-configure.ac-check-for-FS_IOC_READ_VERITY_METADATA-a.patch

diff --git a/package/e2fsprogs/0001-configure.ac-check-for-FS_IOC_READ_VERITY_METADATA-a.patch b/package/e2fsprogs/0001-configure.ac-check-for-FS_IOC_READ_VERITY_METADATA-a.patch
new file mode 100644
index 0000000000..36442a53b8
--- /dev/null
+++ b/package/e2fsprogs/0001-configure.ac-check-for-FS_IOC_READ_VERITY_METADATA-a.patch
@@ -0,0 +1,103 @@
+From 1a2ce8cd956065106ae27a36a5000f00ebc4591f Mon Sep 17 00:00:00 2001
+From: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
+Date: Sat, 22 Nov 2025 21:12:23 +0100
+Subject: [PATCH] configure.ac: check for FS_IOC_READ_VERITY_METADATA
+ availability
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Commit 6bfa843b4435334ac073e42950b48d8bacb54977 ("mke2fs: enable
+copying of fs-verity metadata") introduced support for reading
+fs-verity metadata, which requires using the
+FS_IOC_READ_VERITY_METADATA.
+
+The code is conditionally compiled when the kernel headers have
+<linux/fsverity.h> available. Unfortunately, this check is not
+sufficient: <linux/fsverity.h> was introduced in Linux 5.10, but the
+FS_IOC_READ_VERITY_METADATA was not introduced before 5.12, so if one
+is using 5.10 or 5.11 kernel headers, the build fails with:
+
+./../misc/create_inode.c: In function ‘copy_fs_verity_data’:
+./../misc/create_inode.c:589:10: error: variable ‘arg’ has initializer but incomplete type
+  589 |   struct fsverity_read_metadata_arg arg = {
+      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~
+[...]
+./../misc/create_inode.c:600:20: error: ‘FS_IOC_READ_VERITY_METADATA’ undeclared (first use in this function)
+  600 |   size = ioctl(fd, FS_IOC_READ_VERITY_METADATA, &arg);
+      |                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+This commit therefore extends the configure.ac check to ensure that
+not only <linux/fsverity.h> exists but also that it defines the
+FS_IOC_READ_VERITY_METADATA ioctl.
+
+Upstream: https://github.com/tytso/e2fsprogs/pull/256
+Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
+---
+ configure.ac        | 18 ++++++++++++++++++
+ misc/create_inode.c |  6 +++---
+ 2 files changed, 21 insertions(+), 3 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index a0171163..3e5586a3 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -1997,6 +1997,24 @@ OS_IO_FILE=""
+ esac]
+ AC_SUBST(OS_IO_FILE)
+ 
++dnl Check for fsverity ioctl
++if test "${ac_cv_header_linux_fsverity_h}" = "yes"; then
++   AC_MSG_CHECKING([for FS_IOC_READ_VERITY_METADATA ioctl])
++   AC_PREPROC_IFELSE(
++   [AC_LANG_PROGRAM([[
++#include <linux/fsverity.h>
++#ifndef FS_IOC_READ_VERITY_METADATA
++# error "FS_IOC_READ_VERITY_METADATA not available"
++#endif
++]], [])], [
++   AC_DEFINE([HAVE_FS_IOC_READ_VERITY_METADATA], [1], [Define to 1 if FS_IOC_READ_VERITY_METADATA ioctl is available])
++   AC_MSG_RESULT([yes])
++   ],
++   [
++   AC_MSG_RESULT([no])
++   ])
++fi
++
+ dnl
+ dnl Make our output files, being sure that we create the some miscellaneous 
+ dnl directories
+diff --git a/misc/create_inode.c b/misc/create_inode.c
+index 624efc03..a7918873 100644
+--- a/misc/create_inode.c
++++ b/misc/create_inode.c
+@@ -30,7 +30,7 @@
+ #ifdef HAVE_SYS_SYSMACROS_H
+ #include <sys/sysmacros.h>
+ #endif
+-#ifdef HAVE_LINUX_FSVERITY_H
++#if defined(HAVE_LINUX_FSVERITY_H) && defined(HAVE_FS_IOC_READ_VERITY_METADATA)
+ #include <linux/fsverity.h>
+ #include <linux/fs.h>
+ #endif
+@@ -569,7 +569,7 @@ out:
+ }
+ #endif /* FS_IOC_FIEMAP */
+ 
+-#ifdef HAVE_LINUX_FSVERITY_H
++#if defined(HAVE_LINUX_FSVERITY_H) && defined(HAVE_FS_IOC_READ_VERITY_METADATA)
+ static inline off_t round_up(off_t n, off_t blksz, off_t bias)
+ {
+   return ((n - bias + (blksz - 1)) & ~(blksz - 1)) + bias;
+@@ -738,7 +738,7 @@ static errcode_t copy_file(ext2_filsys fs, int fd, struct stat *statbuf,
+ 		err = copy_file_chunk(fs, fd, e2_file, 0, statbuf->st_size, buf,
+ 				      zerobuf);
+ 
+-#ifdef HAVE_LINUX_FSVERITY_H
++#if defined(HAVE_LINUX_FSVERITY_H) && defined(HAVE_FS_IOC_READ_VERITY_METADATA)
+ 	if (!err && (flags & EXT4_VERITY_FL))
+ 		err = copy_fs_verity(fs, fd, e2_file, statbuf->st_size);
+ #endif
+-- 
+2.51.1
+
diff --git a/package/e2fsprogs/e2fsprogs.mk b/package/e2fsprogs/e2fsprogs.mk
index 27e5e37bca..ad3d1dbe75 100644
--- a/package/e2fsprogs/e2fsprogs.mk
+++ b/package/e2fsprogs/e2fsprogs.mk
@@ -18,6 +18,13 @@ E2FSPROGS_INSTALL_STAGING = YES
 E2FSPROGS_DEPENDENCIES = host-pkgconf util-linux
 HOST_E2FSPROGS_DEPENDENCIES = host-pkgconf host-util-linux
 
+# 0001-configure.ac-check-for-FS_IOC_READ_VERITY_METADATA-a.patch
+# the additional dependencies are only needed for autoreconf
+E2FSPROGS_AUTORECONF = YES
+E2FSPROGS_AUTORECONF_OPTS = --include=$(HOST_DIR)/share/autoconf-archive
+E2FSPROGS_DEPENDENCIES += host-gettext host-autoconf-archive
+HOST_E2FSPROGS_DEPENDENCIES += host-gettext host-autoconf-archive
+
 E2FSPROGS_SELINUX_MODULES = fstools
 
 # e4defrag doesn't build on older systems like RHEL5.x, and we don't
-- 
2.51.1

_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot

^ permalink raw reply related	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2025-12-04 21:33 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-11-23 13:34 [Buildroot] [PATCH] package/e2fsprogs: fix build with headers >= 5.10 and < 5.12 Thomas Petazzoni via buildroot
2025-11-23 14:16 ` Julien Olivain via buildroot
2025-11-27 19:53   ` Markus Mayer via buildroot
2025-11-28  9:21     ` Thomas Petazzoni via buildroot
2025-11-28 21:16       ` Markus Mayer via buildroot
2025-11-29 21:17         ` Thomas Petazzoni via buildroot
2025-12-04 21:33           ` Markus Mayer via buildroot

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox