lguest: allow booting guest with CONFIG_RELOCATABLE=y
authorRusty Russell <rusty@rustcorp.com.au>
Mon, 15 Aug 2011 00:45:10 +0000 (10:15 +0930)
committerRusty Russell <rusty@rustcorp.com.au>
Mon, 15 Aug 2011 00:45:10 +0000 (10:15 +0930)
The CONFIG_RELOCATABLE code tries to align the unpack destination to
the value of 'kernel_alignment' in the setup_hdr.  If that's 0, it
tries to unpack to address 0, which in fact causes the gunzip code
to call 'error("Out of memory while allocating output buffer")'.

The bootloader (ie. the lguest Launcher in this case) should be doing
setting this field; the normal bzImage is 16M, we can use the same.

Reported-by: Stefanos Geraggelos <sgerag@cslab.ece.ntua.gr>
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Cc: stable@kernel.org
Documentation/virtual/lguest/lguest.c

index 043bd7df31399a6a02c770393eb6d7f083e331e3..d928c134dee66953f0b7f163a8e3633ac95e3747 100644 (file)
@@ -1996,6 +1996,9 @@ int main(int argc, char *argv[])
        /* We use a simple helper to copy the arguments separated by spaces. */
        concat((char *)(boot + 1), argv+optind+2);
 
+       /* Set kernel alignment to 16M (CONFIG_PHYSICAL_ALIGN) */
+       boot->hdr.kernel_alignment = 0x1000000;
+
        /* Boot protocol version: 2.07 supports the fields for lguest. */
        boot->hdr.version = 0x207;