linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: ebiederm@xmission.com (Eric W. Biederman)
To: "H. Peter Anvin" <hpa@zytor.com>
Cc: Yinghai Lu <yinghai@kernel.org>,
	Thomas Gleixner <tglx@linutronix.de>, Ingo Molnar <mingo@elte.hu>,
	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: Sat, 24 Nov 2012 17:50:10 -0600	[thread overview]
Message-ID: <87vccud0i5.fsf@xmission.com> (raw)
In-Reply-To: <50B124E9.400@zytor.com> (H. Peter Anvin's message of "Sat, 24 Nov 2012 11:50:01 -0800")

"H. Peter Anvin" <hpa@zytor.com> writes:

> On 11/24/2012 09:32 AM, H. Peter Anvin wrote:
>> On 11/24/2012 04:37 AM, Eric W. Biederman wrote:
>>>
>>> Certainly /sbin/kexec isn't bothering to calculate the end of the setup
>>> header and just being far more conservative and using all of the 16bit
>>> real mode code as it's initializer.
>>>
>>
>> That's not conservative... that's just plain wrong.  It means you're
>> initializing the fields in struct boot_params with garbage instead of a
>> predictable value (zero).

It was conservative at the time the code was introduced and it most
definitely is not wrong.  The code predates the verbage in boot.txt.
Apparently no one bothered to see what /sbin/kexec was actually doing
when they documented the 32bit boot loader interface.  I was under the
impression that it was actual practice that was documented but in this
particular something else was documented instead.  Since /sbin/kexec did
not need any of the more recent features we simply have not noticed it
until now.

>> We could work around it with a sentinel hack... except you *also*
>> probably modify *some* fields and now we have a horrid mix of
>> initialized and uninitialized fields to sort out... and there really
>> isn't any sane way for the kernel to sort that out.
>>
>> We have a huge problem on our hands now because of it.
>>
>
> So, given the mess we now have on our hands... any suggestions how to best solve
> it?  There is the option of simply declaring old kexec binaries broken; they
> will then not work reliably with newer kernels, if they even work reliably now
> -- it is hard to know for certain.

I believe all added variables between the last version of the boot
protocol /sbin/kexec knows about and the current time were added in the
initialized data section.  Certainly we can check and that will tell us
how likely changes in arch/x86/boot/ have been regressions in the 32bit
entry point support.

As for solving this there is a simple solution.  Add a second jump
right after the first jump.   The variables after the second jump can
all be zero initialized.

And if we really care about breaking other boot loaders we can take a
survey and actually look and see what they do.  There really aren't that
many x86 boot loaders.

Eric

  parent reply	other threads:[~2012-11-24 23:50 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
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 [this message]
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=87vccud0i5.fsf@xmission.com \
    --to=ebiederm@xmission.com \
    --cc=hpa@zytor.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).