]> Zhao Yanbai Git Server - minix.git/commitdiff
kernel: some boottime sanitychecks
authorBen Gras <ben@minix3.org>
Tue, 6 Nov 2012 14:36:53 +0000 (15:36 +0100)
committerBen Gras <ben@minix3.org>
Thu, 8 Nov 2012 10:40:35 +0000 (11:40 +0100)
. Check if we have the right number of boot modules
. Check if the ELF parsing of VM actually succeeded

Both these are root causes of less-than-obvious other
errors/asserts a little further down the line; uncovered
while experimenting with booting by iPXE, specifically
(a) iPXE having a 8-multiboot-modules limit and
(b) trying to boot a gzipped VM.

include/minix/com.h
kernel/arch/i386/protect.c
kernel/main.c

index c71b1c3c000b17b0e00deb84ad7c0e954de12a23..8c3ade40163b5d4d73de2652c544c6d1998b5047 100644 (file)
@@ -84,6 +84,7 @@
                                            computation in macros.*/
 #define INIT_PROC_NR ((endpoint_t) LAST_SPECIAL_PROC_NR)  /* init
                                                         -- goes multiuser */
+#define NR_BOOT_MODULES (INIT_PROC_NR+1)
 
 /* Root system process and root user process. */
 #define ROOT_SYS_PROC_NR  RS_PROC_NR
index 8dc050220a3d55fa9a45e04574f3b1dc04153f20..a95397c481c1e1b936a8755d1a7c97db34f43451 100644 (file)
@@ -419,7 +419,8 @@ void arch_boot_proc(struct boot_image *ip, struct proc *rp)
                execi.clearproc = NULL;
 
                /* parse VM ELF binary and alloc/map it into bootstrap pagetable */
-               libexec_load_elf(&execi);
+               if(libexec_load_elf(&execi) != OK)
+                       panic("VM loading failed");
 
                /* Initialize the server stack pointer. Take it down three words
                 * to give startup code something to use as "argc", "argv" and "envp".
index 652f68f5b12de61105727d3958ddc4e7d5031011..45fbe2d4a089e699c9c4af2158ca4145a6e6444a 100644 (file)
@@ -143,6 +143,10 @@ void kmain(kinfo_t *local_cbi)
 
    proc_init();
 
+   if(NR_BOOT_MODULES != kinfo.mbi.mods_count)
+       panic("expecting %d boot processes/modules, found %d",
+               NR_BOOT_MODULES, kinfo.mbi.mods_count);
+
   /* Set up proc table entries for processes in boot image. */
   for (i=0; i < NR_BOOT_PROCS; ++i) {
        int schedulable_proc;