diff options
author | Zhenlei Huang <zlei@FreeBSD.org> | 2023-11-07 04:45:25 +0000 |
---|---|---|
committer | Zhenlei Huang <zlei@FreeBSD.org> | 2023-11-07 04:45:25 +0000 |
commit | ecf710f0e04e3314a492747124166ccb7cf4019e (patch) | |
tree | 039fae0e1e47eee57d34b6df4e6d25c66ba7abb0 | |
parent | 501bdf3001190686bf55d9d333cb533858c2cf2f (diff) | |
download | src-ecf710f0e04e3314a492747124166ccb7cf4019e.tar.gz src-ecf710f0e04e3314a492747124166ccb7cf4019e.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
-rw-r--r-- | sys/kern/kern_linker.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/sys/kern/kern_linker.c b/sys/kern/kern_linker.c index 2367bf35da76..c6eb0273c39d 100644 --- a/sys/kern/kern_linker.c +++ b/sys/kern/kern_linker.c @@ -461,8 +461,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) { |