Page MenuHomeFreeBSD

Fix some problems in SPARSE_MAPPING in the kernel linker.
ClosedPublic

Authored by markj on Sep 22 2019, 7:39 PM.
Tags
None
Referenced Files
Unknown Object (File)
Jan 21 2024, 9:54 AM
Unknown Object (File)
Dec 20 2023, 3:24 AM
Unknown Object (File)
Dec 1 2023, 1:27 AM
Unknown Object (File)
Nov 3 2023, 7:42 PM
Unknown Object (File)
Sep 7 2023, 9:22 AM
Unknown Object (File)
Sep 7 2023, 9:18 AM
Unknown Object (File)
Sep 7 2023, 9:18 AM
Unknown Object (File)
Sep 7 2023, 9:16 AM
Subscribers

Details

Summary
  • Fix some style bugs.
  • Ensure that the end of the mapping passed to vm_page_wire() is page-aligned. vm_map_wire() expects this.
  • Wire pages before reading data into them to ensure that the mapping is backed by resident pages.
  • Apply the protections specified in the segment descriptor using vm_map_protect().
  • Ensure that on amd64 we load KLDs above KERNBASE.

Diff Detail

Lint
Lint Passed
Unit
No Test Coverage
Build Status
Buildable 26653
Build 25027: arc lint + arc unit

Event Timeline

Is there any way to enable SPARSE_MAPPING except manually adding #define ?

sys/kern/link_elf.c
1110

I suspect this is too rough. In principle, the segments need not be page-aligned, and you might remove W or X from a neighbor segment that shares the page with us.

I think the easiest would be to refuse loading such objects.

In D21756#474923, @kib wrote:

Is there any way to enable SPARSE_MAPPING except manually adding #define ?

No. I'm considering adding a kernel option for it, but it needs a better name than SPARSE_MAPPING IMO.

Reject KLDs with unaligned segment base addrs when SPARSE_MAPPING is defined.

markj added inline comments.
sys/kern/link_elf.c
994

I am not sure why we cannot just use kernel_object here. OBJT_DEFAULT doesn't make a lot of sense, since the memory will not be pageable.

This revision is now accepted and ready to land.Sep 23 2019, 5:11 PM