[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH] Support linux boot protocol >= 2.02 long command-lines
From: |
Alon Bar-Lev |
Subject: |
[PATCH] Support linux boot protocol >= 2.02 long command-lines |
Date: |
Sat, 3 May 2008 00:39:31 +0300 |
User-agent: |
KMail/1.9.9 |
Continue from bug#13606 [1]
cmd_line_ptr should not be truncated to 256.
Please review this patch or apply something better.
Tested for pc/linux, guess for efi/linux.
For EFI I did not understand what the lh.cl_offset = 0 is for, but as only
recent boot protocols are
supported I am not sure it is required.
Signed-off-by: Alon Bar-Lev <address@hidden>
---
Index: include/grub/i386/linux.h
===================================================================
RCS file: /sources/grub/grub2/include/grub/i386/linux.h,v
retrieving revision 1.4
diff -u -B -r1.4 linux.h
--- include/grub/i386/linux.h 25 Apr 2008 19:41:49 -0000 1.4
+++ include/grub/i386/linux.h 2 May 2008 21:35:56 -0000
@@ -41,7 +41,9 @@
#define GRUB_LINUX_CL_OFFSET 0x9000
#define GRUB_LINUX_CL_END_OFFSET 0x90FF
-#define GRUB_LINUX_SETUP_MOVE_SIZE 0x9100
+#define GRUB_LINUX_CL_0202_OFFSET 0x9100
+#define GRUB_LINUX_CL_0202_END_OFFSET 0x9FFF
+#define GRUB_LINUX_SETUP_MOVE_SIZE 0xA000
#define GRUB_LINUX_CL_MAGIC 0xA33F
#define GRUB_LINUX_EFI_SIGNATURE \
Index: loader/i386/efi/linux.c
===================================================================
RCS file: /sources/grub/grub2/loader/i386/efi/linux.c,v
retrieving revision 1.2
diff -u -B -r1.2 linux.c
--- loader/i386/efi/linux.c 21 Jul 2007 23:32:28 -0000 1.2
+++ loader/i386/efi/linux.c 2 May 2008 21:35:58 -0000
@@ -391,8 +391,8 @@
lh.type_of_loader = 0x50;
lh.cl_magic = GRUB_LINUX_CL_MAGIC;
- lh.cl_offset = GRUB_LINUX_CL_END_OFFSET;
- lh.cmd_line_ptr = (char *) real_mode_mem + GRUB_LINUX_CL_OFFSET;
+ lh.cl_offset = 0;
+ lh.cmd_line_ptr = (char *) real_mode_mem + GRUB_LINUX_CL_0202_OFFSET;
lh.ramdisk_image = 0;
lh.ramdisk_size = 0;
@@ -531,7 +531,7 @@
}
/* Specify the boot file. */
- dest = grub_stpcpy ((char *) real_mode_mem + GRUB_LINUX_CL_OFFSET,
+ dest = grub_stpcpy ((char *) real_mode_mem + GRUB_LINUX_CL_0202_OFFSET,
"BOOT_IMAGE=");
dest = grub_stpcpy (dest, argv[0]);
@@ -539,7 +539,7 @@
for (i = 1;
i < argc
&& dest + grub_strlen (argv[i]) + 1 < ((char *) real_mode_mem
- + GRUB_LINUX_CL_END_OFFSET);
+ +
GRUB_LINUX_CL_0202_END_OFFSET);
i++)
{
*dest++ = ' ';
Index: loader/i386/pc/linux.c
===================================================================
RCS file: /sources/grub/grub2/loader/i386/pc/linux.c,v
retrieving revision 1.18
diff -u -B -r1.18 linux.c
--- loader/i386/pc/linux.c 8 Jan 2008 11:38:18 -0000 1.18
+++ loader/i386/pc/linux.c 2 May 2008 21:35:58 -0000
@@ -117,7 +117,7 @@
}
if (grub_le_to_cpu16 (lh.version) >= 0x0202)
- lh.cmd_line_ptr = grub_linux_real_addr + GRUB_LINUX_CL_OFFSET;
+ lh.cmd_line_ptr = grub_linux_real_addr + GRUB_LINUX_CL_0202_OFFSET;
else
{
lh.cl_magic = grub_cpu_to_le16 (GRUB_LINUX_CL_MAGIC);
@@ -244,7 +244,7 @@
<< GRUB_DISK_SECTOR_BITS));
/* Specify the boot file. */
- dest = grub_stpcpy (grub_linux_tmp_addr + GRUB_LINUX_CL_OFFSET,
+ dest = grub_stpcpy (grub_linux_tmp_addr + GRUB_LINUX_CL_0202_OFFSET,
"BOOT_IMAGE=");
dest = grub_stpcpy (dest, argv[0]);
@@ -252,13 +252,18 @@
for (i = 1;
i < argc
&& dest + grub_strlen (argv[i]) + 1 < (grub_linux_tmp_addr
- + GRUB_LINUX_CL_END_OFFSET);
+ +
GRUB_LINUX_CL_0202_END_OFFSET);
i++)
{
*dest++ = ' ';
dest = grub_stpcpy (dest, argv[i]);
}
+ grub_strncpy (grub_linux_tmp_addr + GRUB_LINUX_CL_OFFSET,
+ grub_linux_tmp_addr + GRUB_LINUX_CL_0202_OFFSET,
+ GRUB_LINUX_CL_END_OFFSET - GRUB_LINUX_CL_OFFSET - 1);
+ *(grub_linux_tmp_addr + GRUB_LINUX_CL_END_OFFSET) = '\0';
+
len = prot_size;
if (grub_file_read (file, (char *) GRUB_LINUX_BZIMAGE_ADDR, len) != len)
grub_error (GRUB_ERR_FILE_READ_ERROR, "Couldn't read file");
- Re: [PATCH/DRAFT] Support linux boot protocol >= 2.02 long command-lines, (continued)
- Re: [PATCH/DRAFT] Support linux boot protocol >= 2.02 long command-lines, Alon Bar-Lev, 2008/05/02
- Re: [PATCH/DRAFT] Support linux boot protocol >= 2.02 long command-lines, Vesa Jääskeläinen, 2008/05/02
- Re: [PATCH/DRAFT] Support linux boot protocol >= 2.02 long command-lines, Alon Bar-Lev, 2008/05/02
- Re: [PATCH/DRAFT] Support linux boot protocol >= 2.02 long command-lines, Vesa Jääskeläinen, 2008/05/02
- Re: [PATCH/DRAFT] Support linux boot protocol >= 2.02 long command-lines, Alon Bar-Lev, 2008/05/02
- Re: [PATCH/DRAFT] Support linux boot protocol >= 2.02 long command-lines, Vesa Jääskeläinen, 2008/05/02
- Re: [PATCH/DRAFT] Support linux boot protocol >= 2.02 long command-lines, Alon Bar-Lev, 2008/05/02
- Re: [PATCH/DRAFT] Support linux boot protocol >= 2.02 long command-lines, Vesa Jääskeläinen, 2008/05/02
- Re: [PATCH/DRAFT] Support linux boot protocol >= 2.02 long command-lines, Alon Bar-Lev, 2008/05/02
- Re: [PATCH/DRAFT] Support linux boot protocol >= 2.02 long command-lines, Alon Bar-Lev, 2008/05/02
- [PATCH] Support linux boot protocol >= 2.02 long command-lines,
Alon Bar-Lev <=