aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWarner Losh <imp@FreeBSD.org>2022-06-29 22:31:23 +0000
committerWarner Losh <imp@FreeBSD.org>2022-07-15 18:00:51 +0000
commit2870493f1f55d5c00e5593f336dc05805863db7f (patch)
tree564139dc81091a74884c13d4083c667a21b6cf87
parentffb0d016df7e5526e4b8fd74a1f0617c81478328 (diff)
downloadsrc-2870493f1f55d5c00e5593f336dc05805863db7f.tar.gz
src-2870493f1f55d5c00e5593f336dc05805863db7f.zip
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
-rw-r--r--stand/kboot/main.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/stand/kboot/main.c b/stand/kboot/main.c
index 79c03398ba6d..83ad0ceb8a18 100644
--- a/stand/kboot/main.c
+++ b/stand/kboot/main.c
@@ -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 +