config(8) -x headscratcher
kpaasial at gmail.com
Sat Apr 27 15:54:13 UTC 2013
I'm getting a core dump on 'config -x /boot/kernel/kernel' on 9.1-RELEASE i386.
Assertion failed: (r != '\0' && ("Char present in the configuration "
"string mustn't be equal to 0")), function kernconfdump, file
/usr/src/usr.sbin/config/main.c, line 710.
I have double checked that my config file is sane and does not have
any funny characters anywhere.
The system is i386 9.1-RELEASE r249856. The world and kernel are built
with clang and I'm suspecting that the use of clang has something to
do with this segfault.
Looking at the kernel files I can see one very obvious difference.
This is the 'elfdump -c kernel | grep -A 8 kern_conf' output (what
config -x seems to use for finding out the config file from the kernel
image) for the GENERIC kernel from the stock installation:
And this is from the kernel I have built myself using clang and a
custom config file:
The align field looks suspicious, config -x seems to use it to check
for padding but to me it looks like the logic may not work if the
alignment is 1.
This the relevant bit from main.c of config(8)
if (r == '\0' && (size - i) < align)
assert(r != '\0' && ("Char present in the configuration "
"string mustn't be equal to 0"));
More information about the freebsd-stable