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:
parent
ffb0d016df
commit
2870493f1f
@ -340,15 +340,17 @@ time(time_t *tloc)
|
|||||||
return (rv);
|
return (rv);
|
||||||
}
|
}
|
||||||
|
|
||||||
struct host_kexec_segment loaded_segments[128];
|
struct host_kexec_segment loaded_segments[HOST_KEXEC_SEGMENT_MAX];
|
||||||
int nkexec_segments = 0;
|
int nkexec_segments = 0;
|
||||||
|
|
||||||
static ssize_t
|
static ssize_t
|
||||||
get_phys_buffer(vm_offset_t dest, const size_t len, void **buf)
|
get_phys_buffer(vm_offset_t dest, const size_t len, void **buf)
|
||||||
{
|
{
|
||||||
int i = 0;
|
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++) {
|
for (i = 0; i < nkexec_segments; i++) {
|
||||||
if (dest >= (vm_offset_t)loaded_segments[i].mem &&
|
if (dest >= (vm_offset_t)loaded_segments[i].mem &&
|
||||||
dest < (vm_offset_t)loaded_segments[i].mem +
|
dest < (vm_offset_t)loaded_segments[i].mem +
|
||||||
|
Loading…
Reference in New Issue
Block a user