Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package nfs-utils for openSUSE:Factory checked in at 2026-03-14 22:20:57 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/nfs-utils (Old) and /work/SRC/openSUSE:Factory/.nfs-utils.new.8177 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "nfs-utils" Sat Mar 14 22:20:57 2026 rev:191 rq:1338694 version:unknown Changes: -------- --- /work/SRC/openSUSE:Factory/nfs-utils/nfs-utils.changes 2026-03-11 20:50:09.613220425 +0100 +++ /work/SRC/openSUSE:Factory/.nfs-utils.new.8177/nfs-utils.changes 2026-03-14 22:21:23.610642083 +0100 @@ -1,0 +2,7 @@ +Fri Mar 13 10:34:11 UTC 2026 - Anthony Iliopoulos <[email protected]> + +- Fix nfsrahead crash (bsc#1259595) + - Add nfsrahead-quieten-misleading-error-for-non-NFS-block-devic.patch + - Add nfsrahead-zero-initialise-device_info-struct.patch + +------------------------------------------------------------------- New: ---- nfsrahead-quieten-misleading-error-for-non-NFS-block-devic.patch nfsrahead-zero-initialise-device_info-struct.patch ----------(New B)---------- New:- Fix nfsrahead crash (bsc#1259595) - Add nfsrahead-quieten-misleading-error-for-non-NFS-block-devic.patch - Add nfsrahead-zero-initialise-device_info-struct.patch New: - Add nfsrahead-quieten-misleading-error-for-non-NFS-block-devic.patch - Add nfsrahead-zero-initialise-device_info-struct.patch ----------(New E)---------- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ nfs-utils.spec ++++++ --- /var/tmp/diff_new_pack.p3IIts/_old 2026-03-14 22:21:24.522679837 +0100 +++ /var/tmp/diff_new_pack.p3IIts/_new 2026-03-14 22:21:24.526680004 +0100 @@ -1,7 +1,6 @@ # # spec file for package nfs-utils # -# Copyright (c) 2026 SUSE LLC # Copyright (c) 2026 SUSE LLC and contributors # # All modifications and additions to the file contributed by third parties @@ -44,6 +43,8 @@ Source25: rpc-svcgssd.options.conf Source26: nfs.conf Source27: nfs-utils.tmpfiles.conf +Patch0: nfsrahead-quieten-misleading-error-for-non-NFS-block-devic.patch +Patch1: nfsrahead-zero-initialise-device_info-struct.patch BuildRequires: e2fsprogs-devel BuildRequires: gcc-c++ BuildRequires: libtool ++++++ nfsrahead-quieten-misleading-error-for-non-NFS-block-devic.patch ++++++ From: Aaron Tomlin <[email protected]> Date: Wed, 11 Mar 2026 15:14:16 -0400 Subject: nfsrahead: quieten misleading error for non-NFS block devices Git-repo: git://git.linux-nfs.org/projects/steved/nfs-utils.git Git-commit: 3395a0aa79286ce9c3df283fd9fb6db14dbbc333 References: bsc#1259595 When get_device_info() evaluates a physical block device via the fast-path rejection logic, it deliberately returns -ENODEV. Previously, main() handled this by logging a D_GENERAL error ("unable to find device"). Because udev invokes nfsrahead for all block devices across the system, this results in misleading journal spam for devices that were intentionally skipped, rather than genuinely missing. Update the error handling logic in main() to explicitly catch the -ENODEV return code. When encountered, log a more accurate "skipping non-NFS device" message at the D_ALL debugging level. This prevents unnecessary journal noise whilst maintaining the existing behaviour of returning the errno exit status. Reported-by: Yi Zhang <[email protected]> Tested-by: Yi Zhang <[email protected]> Signed-off-by: Aaron Tomlin <[email protected]> Signed-off-by: Steve Dickson <[email protected]> Acked-by: Anthony Iliopoulos <[email protected]> --- tools/nfsrahead/main.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/tools/nfsrahead/main.c b/tools/nfsrahead/main.c index 33487f37badb..86c7fcc6d30c 100644 --- a/tools/nfsrahead/main.c +++ b/tools/nfsrahead/main.c @@ -218,7 +218,11 @@ int main(int argc, char **argv) if ((argc - optind) != 1) xlog_err("expected the device number of a BDI; is udev ok?"); - if ((ret = get_device_info(argv[optind], &device)) != 0 || device.fstype == NULL) { + ret = get_device_info(argv[optind], &device); + if (ret == -ENODEV) { + xlog(D_ALL, "skipping non-NFS device %s\n", argv[optind]); + goto out; + } else if (ret != 0 || device.fstype == NULL) { xlog(D_GENERAL, "unable to find device %s\n", argv[optind]); goto out; } ++++++ nfsrahead-zero-initialise-device_info-struct.patch ++++++ From: Aaron Tomlin <[email protected]> Date: Wed, 11 Mar 2026 12:41:28 -0400 Subject: nfsrahead: zero-initialise device_info struct Git-repo: git://git.linux-nfs.org/projects/steved/nfs-utils.git Git-commit: 20fa4785ce5235c41fd27044d7fdef377dd0e088 References: bsc#1259595 A recent commit introduced a fast-path rejection mechanism to prevent udev worker thread exhaustion. However, this optimisation exposed a bug in the initialisation of the device_info struct in main(). When the fast-path is triggered (e.g., for a physical block device like 8:16), get_device_info() instantly returns -ENODEV. Because this early exit occurs before get_mountinfo() is invoked, init_device_info() is never called. Consequently, the device_info struct remains populated with uninitialised stack memory. When main() catches the error and jumps to the cleanup path, free_device_info() attempts to call free() on garbage pointers, resulting in a glibc abort(3). Fix this by explicitly zero-initialising the device_info struct at declaration, preventing the cleanup path from freeing uninitialised memory during an early exit. Fixes: 0f5fe65d ("nfsrahead: fix udev worker exhaustion by skipping non-NFS devices") Reported-by: Yi Zhang <[email protected]> Tested-by: Yi Zhang <[email protected]> Signed-off-by: Aaron Tomlin <[email protected]> Signed-off-by: Steve Dickson <[email protected]> Acked-by: Anthony Iliopoulos <[email protected]> --- tools/nfsrahead/main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/nfsrahead/main.c b/tools/nfsrahead/main.c index 78cd2581e8c5..33487f37badb 100644 --- a/tools/nfsrahead/main.c +++ b/tools/nfsrahead/main.c @@ -191,7 +191,7 @@ static int conf_get_readahead(const char *kind) { int main(int argc, char **argv) { int ret = 0, opt; - struct device_info device; + struct device_info device = { 0 }; unsigned int readahead = 128, log_level, log_stderr = 0;
