kboot: Properly cap number of segments loaded for kexec

Linux has an arbitrary limit of 16 segments. Make sure we don't load too
many.

Sponsored by:		Netflix
This commit is contained in:
Warner Losh 2022-06-29 16:31:23 -06:00
parent ffb0d016df
commit 2870493f1f

View File

@ -340,15 +340,17 @@ time(time_t *tloc)
return (rv);
}
struct host_kexec_segment loaded_segments[128];
struct host_kexec_segment loaded_segments[HOST_KEXEC_SEGMENT_MAX];
int nkexec_segments = 0;
static ssize_t
get_phys_buffer(vm_offset_t dest, const size_t len, void **buf)
{
int i = 0;
const size_t segsize = 4*1024*1024;
const size_t segsize = 8*1024*1024;
if (nkexec_segments == HOST_KEXEC_SEGMENT_MAX)
panic("Tried to load too many kexec segments");
for (i = 0; i < nkexec_segments; i++) {
if (dest >= (vm_offset_t)loaded_segments[i].mem &&
dest < (vm_offset_t)loaded_segments[i].mem +