kern linker: Do not touch userrefs of the kernel file

A nonzero `userrefs` of a linker file indicates that the file, either
loaded from kldload(2) or preloaded, can be unloaded via kldunload(2).
As for the kernel file, it can be unloaded by the loader but should not
be after initialization.

This change fixes regression from d9ce8a41ea which incidentally
increases `userrefs` of the kernel file.

Reviewed by:	dfr, dab, jhb
Fixes:	d9ce8a41ea kern_linker: Handle module-loading failures in preloaded .ko files
MFC after:	2 weeks
Differential Revision:	https://reviews.freebsd.org/D42530
This commit is contained in:
Zhenlei Huang
2024-03-26 16:47:02 +08:00
parent f43ff3e15c
commit 39450eba8e
+3
View File
@@ -1862,6 +1862,9 @@ linker_preload_finish(void *arg)
sx_xlock(&kld_sx);
TAILQ_FOREACH_SAFE(lf, &linker_files, link, nlf) {
if (lf == linker_kernel_file)
continue;
/*
* If all of the modules in this file failed to load, unload
* the file and return an error of ENOEXEC. (Parity with