config(8) -x headscratcher

Kimmo Paasiala kpaasial at gmail.com
Sun Apr 28 01:41:00 UTC 2013


On Sat, Apr 27, 2013 at 11:53 PM, Kimmo Paasiala <kpaasial at gmail.com> wrote:
> On Sat, Apr 27, 2013 at 11:42 PM, Kimmo Paasiala <kpaasial at gmail.com> wrote:
>> On Sat, Apr 27, 2013 at 10:05 PM, Wojciech A. Koszek
>> <wkoszek at freebsd.org> wrote:
>>> On Sat, Apr 27, 2013 at 06:54:11PM +0300, Kimmo Paasiala wrote:
>>>> 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:
>>>>
>>>>       sh_name: kern_conf
>>>>       sh_type: SHT_PROGBITS
>>>>       sh_flags: SHF_ALLOC
>>>>       sh_addr: 0xc1039f80
>>>>       sh_offset: 12820352
>>>>       sh_size: 3771
>>>>       sh_link: 0
>>>>       sh_info: 0
>>>>       sh_addralign: 32
>>>>
>>>> And this is from the kernel I have built myself using clang and a
>>>> custom config file:
>>>>
>>>>       sh_name: kern_conf
>>>>       sh_type: SHT_PROGBITS
>>>>       sh_flags: SHF_ALLOC
>>>>       sh_addr: 0xc09aee9c
>>>>       sh_offset: 5959324
>>>>       sh_size: 1994
>>>>       sh_link: 0
>>>>       sh_info: 0
>>>>       sh_addralign: 1
>>>>
>>>> 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)
>>>>
>>>
>>> Kimmo,
>>>
>>> Lets keep discussion on hackers@ only. I do agree with you that config(8)
>>> internal implementation might have its issues.
>>>
>>> Can you make your kernel configuration file, faulty kernel image and exact
>>> build instructions available to me?
>>>
>>> --
>>> Wojciech A. Koszek
>>> wkoszek at FreeBSD.czest.pl
>>> http://FreeBSD.czest.pl/~wkoszek/
>>
>> The kernel config file:
>>
>> http://pastebin.com/j0J9NPCi
>>
>> My /etc/make.conf:
>>
>> http://pastebin.com/HYudWCA9
>>
>> And /etc/src.conf:
>>
>> http://pastebin.com/ZAKq6ABT
>>
>> I'll see how I can make the kernel image available.
>>
>> -Kimmo
>
> The kernel file:
>
> https://www.dropbox.com/s/07mjk6j4ditbl9r/kernel
>
> -Kimmo

dmesg(8) output of the system:

http://pastebin.com/hqjsak2n

-Kimmo


More information about the freebsd-hackers mailing list