Page MenuHomeFreeBSD

libthr: Use kern.stacktop for thread stack calculation.

Authored by on Sep 10 2021, 6:14 AM.
Referenced Files
F72551921: D31898.diff
Sun, Dec 10, 12:21 AM
Unknown Object (File)
Tue, Nov 14, 6:40 PM
Unknown Object (File)
Sat, Nov 11, 9:45 AM
Unknown Object (File)
Oct 19 2023, 10:42 PM
Unknown Object (File)
Oct 19 2023, 6:49 PM
Unknown Object (File)
Oct 17 2023, 6:55 PM
Unknown Object (File)
Oct 17 2023, 6:54 PM
Unknown Object (File)
Oct 17 2023, 6:54 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

Lint Skipped
Tests Skipped

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