aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZhenlei Huang <zlei@FreeBSD.org>2023-11-07 04:45:25 +0000
committerZhenlei Huang <zlei@FreeBSD.org>2024-01-15 10:31:01 +0000
commit445eb90240ecbd095d8cf865af6773022e8dd750 (patch)
tree8f4ce21a5448b2613367f531508f7bdaf77e52a8
parent0bbd27375057ff98b7a1ea6d661f2a087a8ecba1 (diff)
downloadsrc-445eb90240ecbd095d8cf865af6773022e8dd750.tar.gz
src-445eb90240ecbd095d8cf865af6773022e8dd750.zip
kern linker: Do not retry loading modules on EEXIST
LINKER_LOAD_FILE() calls linker_load_dependencies() which will return EEXIST in case the module to be loaded has already been compiled into the kernel. Since the format of the module is now recognized then there is no need to retry loading with a different linker, otherwise the userland will get misleading error number ENOEXEC. PR: 274936 Reviewed by: dfr MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D42474 (cherry picked from commit ecf710f0e04e3314a492747124166ccb7cf4019e) (cherry picked from commit e7fd435d3d4e888d9894d8c212c29ae6e2768f74) (cherry picked from commit d18326a7cf14804086550c7463be9721e8d28b64)
-rw-r--r--sys/kern/kern_linker.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/sys/kern/kern_linker.c b/sys/kern/kern_linker.c
index f0732e7012ae..c199d4eb0f31 100644
--- a/sys/kern/kern_linker.c
+++ b/sys/kern/kern_linker.c
@@ -448,8 +448,11 @@ linker_load_file(const char *filename, linker_file_t *result)
* If we got something other than ENOENT, then it exists but
* we cannot load it for some other reason.
*/
- if (error != ENOENT)
+ if (error != ENOENT) {
foundfile = 1;
+ if (error == EEXIST)
+ break;
+ }
if (lf) {
error = linker_file_register_modules(lf);
if (error == EEXIST) {