[prev in list] [next in list] [prev in thread] [next in thread] 

List:       freebsd-hackers
Subject:    kmod linking is very strange
From:       Godfrey van der Linden <gvdl () mac ! com>
Date:       2013-03-18 17:21:50
Message-ID: 8B0E0420-3E21-4230-97BC-1689225E1B5A () mac ! com
[Download RAW message or body]

I posted this to current, but was steered to hackers. 

Begin forwarded message:

> From: Godfrey Van der Linden <gvdl@juniper.net>
> Subject: kmod linking is very strange
> Date: 15March, 2013 16:46:13 PDT
> To: freebsd-current@freebsd.org
> 
> G'day, All.
> 
> First post so please be gentle ;-). Are the barracudas here?
> 
> Summary:
> 
> Module link-elf will link against static symbols and will fail if the kernel is not \
> compiled with DDB or the required MODULE_DEPEND has been stripped of local symbols, \
> see nm -g miibus.ko. I propose that we add a sysctl & associated boot arg that only \
> allows kmod loading against externally visible symbols. Then in 11 we can enable \
> this flag by default. 
> In Detail:
> 
> Due to another bug in sys/conf/kmod.mk, \
> (http://www.freebsd.org/cgi/query-pr.cgi?pr=177008, contains a patch) the miibus.ko \
> exports no symbols.  I.e. symbols are 'static'.  
> sys/kern/link-elf.c:link_elf_lookup_symbol() is the culprit. After determining that \
> an external symbol can't be found, it does the following. 
> /* If we have not found it, look at the full table (if loaded) */
> if (ef->symtab == ef->ddbsymtab)
> return (ENOENT);
> 
> /* Exhaustive search */
> for (i = 0, symp = ef->ddbsymtab; i < ef->ddbsymcnt; i++, symp++) {
> strp = ef->ddbstrtab + symp->st_name;
> if (strcmp(name, strp) == 0) {
> if (symp->st_shndx != SHN_UNDEF ||
> (symp->st_value != 0 &&
> ELF_ST_TYPE(symp->st_info) == STT_FUNC)) {
> *sym = (c_linker_sym_t) symp;
> return (0);
> }
> return (ENOENT);
> }
> }
> 
> This code walks the ddbsymtab looking for any symbol, including locals.
> 
> Any kernel that is not built with DDB or any MODULE_DEPEND dependency .ko that is \
> stripped will break module loading. 
> 
> Godfrey van der Linden
> _______________________________________________
> freebsd-current@freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-current
> To unsubscribe, send any mail to "freebsd-current-unsubscribe@freebsd.org"

_______________________________________________
freebsd-hackers@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
To unsubscribe, send any mail to "freebsd-hackers-unsubscribe@freebsd.org"


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic