aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZhenlei Huang <zlei@FreeBSD.org>2024-03-26 03:55:45 +0000
committerZhenlei Huang <zlei@FreeBSD.org>2024-04-09 04:13:08 +0000
commita2f57656620d2ffbb8b79789de34a6fc657286d5 (patch)
tree13d9bf1250e1391ad800aef0d896335ef725ee33
parent092dd9545f65b18967390e269107d85fd309d7be (diff)
downloadsrc-a2f57656620d2ffbb8b79789de34a6fc657286d5.tar.gz
src-a2f57656620d2ffbb8b79789de34a6fc657286d5.zip
kern linker: Do not unload a module if it has dependants
Despite the name, linker_file_unload() will drop a reference and return success when the module file has dependants, i.e. it has more than one reference. When user request to unload such modules then the kernel should reject unambiguously and immediately. PR: 274986 Reviewed by: dfr, dab, jhb MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D42527 (cherry picked from commit f43ff3e15c8b4b161ce09c8ab008abc4222db26b) (cherry picked from commit f1994d1eb215a2b7cb644329797dc623ec883120)
-rw-r--r--sys/kern/kern_linker.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/sys/kern/kern_linker.c b/sys/kern/kern_linker.c
index bc2f477997e0..8f83fc4c474f 100644
--- a/sys/kern/kern_linker.c
+++ b/sys/kern/kern_linker.c
@@ -1207,6 +1207,8 @@ kern_kldunload(struct thread *td, int fileid, int flags)
printf("kldunload: attempt to unload file that was"
" loaded by the kernel\n");
error = EBUSY;
+ } else if (lf->refs > 1) {
+ error = EBUSY;
} else {
lf->userrefs--;
error = linker_file_unload(lf, flags);