Page MenuHomeFreeBSD

libthr: Use kern.stacktop for thread stack calculation.

Authored by on Sep 10 2021, 6:14 AM.
Referenced Files
Unknown Object (File)
Mon, Sep 18, 3:57 PM
Unknown Object (File)
Wed, Sep 6, 9:05 AM
Unknown Object (File)
Aug 23 2023, 12:42 AM
Unknown Object (File)
Aug 18 2023, 6:30 PM
Unknown Object (File)
Aug 14 2023, 10:35 PM
Unknown Object (File)
Aug 13 2023, 4:20 PM
Unknown Object (File)
Jul 30 2023, 4:21 PM
Unknown Object (File)
Jun 27 2023, 10:17 PM



Use the new kern.stacktop sysctl to retrieve the address of stack top
instead of kern.usrstack. kern.usrstack does not have any knowledge
of the stack gap, so this can cause problems with thread stacks.
Using kern.stacktop sysctl should fix most of those problems.
kern.usrstack is used as a fallback when kern.stacktop cannot be read.

Rename usrstack variables to stacktop to reflect this change.

Fixes problems with firefox and thunderbird not starting with
stack gap enabled.

Diff Detail

rG FreeBSD src repository
Lint Not Applicable
Tests Not Applicable

Event Timeline created this revision.

People will need to remember to installkernel before installworld (as documented). Supporting both for a period of time may avoid POLA with mismatching kernel and userland, i.e. check for stacktop first and if that fails check for usrstack. like this?

len = sizeof (_stacktop);
if (sysctl(mib, 2, &_stacktop, &len, NULL, 0) == -1) {
        mib[1] = KERN_USRSTACK;
        if (sysctl(mib, 2, &_stacktop, &len, NULL, 0) == -1)
                PANIC("Cannot get kern.stacktop from sysctl");
} edited the summary of this revision. (Show Details)

Add kern.usrstack fallback if kern.stacktop was not found.

Additionally, change sizeof(mib) / sizeof(mib[0]) to nitems() macro in singlethread_map_stacks_exec() function.

Hi, do you have any further comments or remarks? If there are no objections, I'm going to merge this patch by EOW.

This revision is now accepted and ready to land.Oct 13 2021, 11:04 AM