Subject: Re: Bug in ksyms, kern/21526
To: Quentin Garnier <netbsd@quatriemek.com>
From: None <ragge@ludd.luth.se>
List: tech-kern
Date: 11/16/2003 12:13:57
> 
> I would like to commit the attached patch, which actually solves the
> problems outlined in kern/21256.
> 
I assume you mean 21526 :-) Oh, that was an old one.  I haven't seen
it before (maybe therefore I haven't taken any care of it :-)

> Currently, when support for /dev/ksyms is compiled in, ksyms_addsym will
> shift every symbol value to make the symbol tables appear as one when
> reading from /dev/ksyms.  But this makes the value of the symbol invalid
> when used in the kernel, and lead to crashes when loading a LKM module
> that uses modules from other LKMs.  The fact that the kernel's symbol
> table appears as the first one means the kernel symbols values are not
> shifted, otherwise loading any LKM would crash.
> 
Yeah, you discovered a thinko from my side here.  I tested it by 
loading one module that depended on one other, which worked (probably
because the correct phase of moon etc).

> most importantly to ksyms_getval() to indicate whether the request comes
> from the kernel or the userland.  It also adds to handy defines as
> wrappers around the new ksyms_getval.  Note that this change will require
> a kernel version bump.
> 
Why? Your changes does not affect userland, and the only usage of 
those routines are the one you changed.

> The attached patch introduces a new function ksyms_rensymtab that allows
> renaming a symbol time.  It is used when loading a LKM, by adding its
> symbol table under the name "/lkmtemp/" before calling the entry function,
> and renaming it to its final name afterwards.
> 
This is a known problem, and also an annoying one :-)

> I know that ksyms_addsymtab can sleep, so maybe I should not make the
> temporary name unique, but rather add the pid of the modload process to
> it.  Also, maybe there should be some locking/sleeping in ksyms_rensymtab.
> 
The trivial loching is just to prevent the symbols to be fiddled while
/dev/ksyms is open. This only changes the symbol table name which is not
exposed to userland, so it don't have to be locked.

> Comments?  I know the LKM part is just a hack, but not by much more than
> what we do to load LKMs, and a well designed in-kernel linker mechanism
> will solve the issue.  In the meantime, I think it is useful to be able to
> access LKM symbols at that precise time.
> 
When looking through your patches it seems good.  As you wrote, an in-kernel
linker would take care of much of the problems (and also would cause
much of the ksyms code to be removed/changed).  I say check it in.

Hm, I hope I can spend some time soon to deal with the in-kernel linker
again, but it will probably not be until next year.

-- Ragge