modprobe: don't attempt to remove an already removed module

commit 327c587a0bfe0c62aed05efe834de7422e480d02
Author: Jan Stancek <jstancek@redhat.com>
Date:   Tue Sep 30 10:37:21 2025 +0200

    modprobe: don't attempt to remove an already removed module

    In a scenario like following:
        # lsmod | grep -e bnx2i -e cnic
        bnx2i                  94208  0
        libiscsi               94208  1 bnx2i
        cnic                   90112  1 bnx2i
        uio                    32768  1 cnic
        scsi_transport_iscsi   196608  2 bnx2i,libiscsi

        # modprobe -v --remove --remove-holders cnic
        rmmod bnx2i
        rmmod cnic
        rmmod libiscsi
        rmmod cnic
        modprobe: ERROR: libkmod/libkmod-module.c:856 kmod_module_remove_module()
        could not remove 'cnic': No such file or directory

    modprobe attempts to remove cnic module twice and propagates that error
    to the user with a message as well as an exit code.

    Add a check to avoid attempts to remove modules that are already gone.

    Signed-off-by: Jan Stancek <jstancek@redhat.com>
    Reviewed-by: Emil Velikov <emil.l.velikov@gmail.com>
    Link: https://github.com/kmod-project/kmod/pull/pull/393
    Signed-off-by: Lucas De Marchi <demarchi@kernel.org>

Resolves: RHEL-113203
Signed-off-by: Jan Stancek <jstancek@redhat.com>
This commit is contained in:
Jan Stancek 2026-02-03 11:21:00 +01:00
parent 5275fcaf0f
commit 4b96165814
2 changed files with 65 additions and 1 deletions

View File

@ -0,0 +1,59 @@
From 327c587a0bfe0c62aed05efe834de7422e480d02 Mon Sep 17 00:00:00 2001
Message-ID: <327c587a0bfe0c62aed05efe834de7422e480d02.1770113832.git.jstancek@redhat.com>
From: Jan Stancek <jstancek@redhat.com>
Date: Tue, 30 Sep 2025 10:37:21 +0200
Subject: [PATCH] modprobe: don't attempt to remove an already removed module
Content-type: text/plain
In a scenario like following:
# lsmod | grep -e bnx2i -e cnic
bnx2i 94208 0
libiscsi 94208 1 bnx2i
cnic 90112 1 bnx2i
uio 32768 1 cnic
scsi_transport_iscsi 196608 2 bnx2i,libiscsi
# modprobe -v --remove --remove-holders cnic
rmmod bnx2i
rmmod cnic
rmmod libiscsi
rmmod cnic
modprobe: ERROR: libkmod/libkmod-module.c:856 kmod_module_remove_module()
could not remove 'cnic': No such file or directory
modprobe attempts to remove cnic module twice and propagates that error
to the user with a message as well as an exit code.
Add a check to avoid attempts to remove modules that are already gone.
Signed-off-by: Jan Stancek <jstancek@redhat.com>
Reviewed-by: Emil Velikov <emil.l.velikov@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/pull/393
Signed-off-by: Lucas De Marchi <demarchi@kernel.org>
---
tools/modprobe.c | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
diff --git a/tools/modprobe.c b/tools/modprobe.c
index 757723e8519c..349e7e0ef6b2 100644
--- a/tools/modprobe.c
+++ b/tools/modprobe.c
@@ -507,9 +507,12 @@ static int rmmod_do_module(struct kmod_module *mod, int flags)
}
}
- if (!cmd)
- err = rmmod_do_remove_module(mod);
- else
+ if (!cmd) {
+ if (kmod_module_get_refcnt(mod) != -ENOENT)
+ err = rmmod_do_remove_module(mod);
+ else
+ err = 0;
+ } else
err = command_do(mod, "remove", cmd, NULL);
if (err < 0)
--
2.47.3

View File

@ -16,7 +16,7 @@
Name: kmod
Version: 31
Release: 12%{?dist}
Release: 13%{?dist}
Summary: Linux kernel module management utilities
# https://docs.fedoraproject.org/en-US/legal/license-field/#_no_effective_license_analysis
@ -70,6 +70,7 @@ Source2: depmod.conf.dist
Patch1: kmod-tip.patch
# v33~1 "libkmod: avoid undefined behaviour in libkmod-builtin.c:get_string"
Patch2: 0001-libkmod-avoid-undefined-behaviour-in-libkmod-builtin.patch
Patch3: 0001-modprobe-don-t-attempt-to-remove-an-already-removed-.patch
Exclusiveos: Linux
@ -196,6 +197,10 @@ install -m 0644 %{SOURCE2} $RPM_BUILD_ROOT%{_sysconfdir}/depmod.d/dist.conf
%{_libdir}/libkmod.so
%changelog
* Tue Feb 03 2026 Jan Stancek <jstancek@redhat.com> - 31-13
- modprobe: don't attempt to remove an already removed module
- Resolves: RHEL-113203
* Tue Aug 19 2025 Jan Stancek <jstancek@redhat.com> - 31-12
- check weak-updates directory exists before using it
- Resolves: RHEL-109793