linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "H. Peter Anvin" <hpa@zytor.com>
To: Yinghai Lu <yinghai@kernel.org>
Cc: Thomas Gleixner <tglx@linutronix.de>, Ingo Molnar <mingo@elte.hu>,
	"Eric W. Biederman" <ebiederm@xmission.com>,
	linux-kernel@vger.kernel.org, Rob Landley <rob@landley.net>,
	Matt Fleming <matt.fleming@intel.com>
Subject: Re: [PATCH v3 11/12] x86, boot: add fields to support load bzImage and ramdisk high
Date: Wed, 21 Nov 2012 11:18:50 -0800	[thread overview]
Message-ID: <50AD291A.10600@zytor.com> (raw)
In-Reply-To: <CAE9FiQUSjRT-r5ZE3WHVaKkUOhwFWkm9CTCv1Aa63DOsfMQMiQ@mail.gmail.com>

On 11/21/2012 10:59 AM, Yinghai Lu wrote:
> 
> in boot_param:
> 
>         struct setup_header hdr;    /* setup header */  /* 0x1f1 */
>         __u8  _pad7[0x290-0x1f1-sizeof(struct setup_header)];
>         __u32 edd_mbr_sig_buffer[EDD_MBR_SIG_MAX];      /* 0x290 */
>         struct e820entry e820_map[E820MAX];             /* 0x2d0 */
>         __u8  _pad8[48];                                /* 0xcd0 */
>         struct edd_info eddbuf[EDDMAXNR];               /* 0xd00 */
>         __u8  _pad9[276];                               /* 0xeec */
> 
> so we can use till 0x290.
> 
> and after those three dword, will still have 7 left.
> 

Not quite... the length of the initialized header is given by the byte
at 0x201, which can be at most 0x7f unfortunately.  This means 0x280 is
the endpoint, not 0x290.  Some bootloaders rely on this.

However, from the point of view of the 32- and 64-bit entry points, this
is effectively a .data segment, but these can go into the corresponding
.bss segment, which is the rest of struct boot_params.

>>
>>> diff --git a/arch/x86/boot/compressed/cmdline.c
>>> b/arch/x86/boot/compressed/cmdline.c
>>> index b4c913c..00678d3 100644
>>> --- a/arch/x86/boot/compressed/cmdline.c
>>> +++ b/arch/x86/boot/compressed/cmdline.c
>>> @@ -17,6 +17,9 @@ static unsigned long get_cmd_line_ptr(void)
>>>   {
>>>         unsigned long cmd_line_ptr = real_mode->hdr.cmd_line_ptr;
>>>
>>> +       if (real_mode->hdr.version >= 0x020c)
>>> +               cmd_line_ptr |= (u64)real_mode->hdr.ext_cmd_line_ptr <<
>>> 32;
>>> +
>>>         return cmd_line_ptr;
>>>   }
>>
>>
>> No.  hdr.version is information from the kernel to the bootloader; it is
>> meaningless to look at it inside the kernel.
>>
> could remove them, but how about vmlinux elf.
> 
> when kexec vmlinux elf, it will fake one hdr, and fill version there.
> 
>> Same in a bunch of other places.

Then whatever loads vmlinux.elf is responsible for initializing those
fields to zero anyway.  It is still an atrocious abuse.  What we
probably need to do is to include the initialized header in a section in
vmlinux.elf containing the default struct boot_params.  This is the kind
of things that happen when people do things without thinking through all
the consequences.

	-hpa



  reply	other threads:[~2012-11-21 19:19 UTC|newest]

Thread overview: 57+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-11-21  7:15 [PATCH v3 00/12] x86, boot, 64bit: Add support for loading ramdisk and bzImage high Yinghai Lu
2012-11-21  7:15 ` [PATCH v3 01/12] x86, boot: move verify_cpu.S after 0x200 Yinghai Lu
2012-11-21 17:23   ` H. Peter Anvin
2012-11-21 19:45     ` Yinghai Lu
2012-11-21 19:50       ` H. Peter Anvin
2012-11-21 20:15         ` Yinghai Lu
2012-11-22  5:48           ` Eric W. Biederman
     [not found]             ` <3178cb29-0e9e-44d2-b21f-45c53f38980a@email.android.com>
2012-11-22 11:27               ` Eric W. Biederman
2012-11-24  7:00                 ` Yinghai Lu
2012-11-21  7:16 ` [PATCH v3 02/12] x86, boot: Move lldt/ltr out of 64bit code section Yinghai Lu
2012-11-21  7:16 ` [PATCH v3 03/12] x86, 64bit: set extra ident page table for whole kernel range Yinghai Lu
2012-11-21  7:16 ` [PATCH v3 04/12] x86, 64bit: add support for loading kernel above 512G Yinghai Lu
2012-11-21  7:16 ` [PATCH v3 05/12] x86: Merge early_reserve_initrd for 32bit and 64bit Yinghai Lu
2012-11-21  7:40   ` Pekka Enberg
2012-11-21  7:16 ` [PATCH v3 06/12] x86: add get_ramdisk_image/size Yinghai Lu
2012-11-21  7:16 ` [PATCH v3 07/12] x86, boot: add get_cmd_line_ptr() Yinghai Lu
2012-11-21  7:16 ` [PATCH v3 08/12] x86, boot: Don't check if cmd_line_ptr is accessible in misc/decompressor() Yinghai Lu
2012-11-21 17:21   ` H. Peter Anvin
2012-11-21 19:18     ` Yinghai Lu
2012-11-21  7:16 ` [PATCH v3 09/12] x86, boot: update cmd_line_ptr to unsigned long Yinghai Lu
2012-11-21  7:16 ` [PATCH v3 10/12] x86: use io_remap to access real_mode_data Yinghai Lu
2012-11-21  7:16 ` [PATCH v3 11/12] x86, boot: add fields to support load bzImage and ramdisk high Yinghai Lu
2012-11-21 17:17   ` H. Peter Anvin
2012-11-21 18:59     ` Yinghai Lu
2012-11-21 19:18       ` H. Peter Anvin [this message]
2012-11-22  5:56         ` Yinghai Lu
     [not found]           ` <a1ca794a-09d4-4d36-8c8c-67100cb3696e@email.android.com>
2012-11-22  6:47             ` Yinghai Lu
2012-11-22  6:58               ` Yinghai Lu
2012-11-22 15:59                 ` H. Peter Anvin
2012-11-22 18:28                   ` Yinghai Lu
2012-11-22 18:37                     ` H. Peter Anvin
2012-11-22 18:50                       ` Yinghai Lu
2012-11-22 18:51                         ` H. Peter Anvin
2012-11-22 20:18                           ` Yinghai Lu
2012-11-22 20:20                             ` H. Peter Anvin
2012-11-22 20:29                               ` Yinghai Lu
2012-11-22 20:50                             ` H. Peter Anvin
2012-11-22 21:02                               ` H. Peter Anvin
2012-11-22 22:13                                 ` Yinghai Lu
2012-11-24 12:37                       ` Eric W. Biederman
2012-11-24 17:32                         ` H. Peter Anvin
     [not found]                           ` <CAE9FiQV0Q0fi7TrNjihdsUt0ueT4LLON4o+JEmX6ry9S6AU-ug@mail.gmail.com>
2012-11-24 18:24                             ` H. Peter Anvin
2012-11-24 19:50                           ` H. Peter Anvin
2012-11-24 21:30                             ` Yinghai Lu
2012-11-24 21:38                               ` H. Peter Anvin
2012-11-24 22:18                                 ` Yinghai Lu
2012-11-24 22:32                                   ` H. Peter Anvin
2012-11-24 23:24                                     ` Yinghai Lu
2012-11-24 23:50                             ` Eric W. Biederman
2012-11-25  0:04                               ` H. Peter Anvin
2012-11-25  0:11                                 ` Yinghai Lu
2012-11-25  5:50                                   ` Yinghai Lu
2012-11-25  5:52                                     ` H. Peter Anvin
2012-11-25  6:09                                       ` Yinghai Lu
2012-11-25  0:04                               ` Yinghai Lu
2012-11-25  0:06                                 ` H. Peter Anvin
2012-11-21  7:16 ` [PATCH v3 12/12] x86: remove 1024g limitation for kexec buffer on 64bit Yinghai Lu

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=50AD291A.10600@zytor.com \
    --to=hpa@zytor.com \
    --cc=ebiederm@xmission.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=matt.fleming@intel.com \
    --cc=mingo@elte.hu \
    --cc=rob@landley.net \
    --cc=tglx@linutronix.de \
    --cc=yinghai@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).