From: Vivek Goyal <vgoyal@redhat.com>
To: "Eric W. Biederman" <ebiederm@xmission.com>
Cc: Kexec Mailing List <kexec@lists.infradead.org>
Subject: Re: Query regarding ELF loader arg style
Date: Thu, 16 Jan 2014 10:13:02 -0500 [thread overview]
Message-ID: <20140116151301.GB6156@redhat.com> (raw)
In-Reply-To: <87a9eyaumi.fsf@xmission.com>
On Tue, Jan 14, 2014 at 05:42:13PM -0800, Eric W. Biederman wrote:
> Vivek Goyal <vgoyal@redhat.com> writes:
>
> > Hi Eric,
> >
> > I am looking at kexec ELF loader code and wondering what are arg style
> > options.
> >
> > #define ARG_STYLE_ELF 0
> > #define ARG_STYLE_LINUX 1
> > #define ARG_STYLE_NONE 2
> >
> >
> > I have looked at them many a times but frankly never fully understood
> > what do they represent and what's the intention behind them. Can you
> > please elaborate a bit on this.
>
> There is no standard of what kind of arguments a standalone ELF
> executable will receive from a bootloader.
>
> Which means that in practice to support different OS's you either need
> to pass nothing or make something up.
>
> ARG_STYLE_ELF is my own invention and a sad attempt at coming up with an
> OS agnostic standard.
>
> ARG_STYLE_LINUX is an ELF image receiving the same arguments as the
> linux kernel. It is a mess but it is reasonably well documented.
Hi Eric,
Even ARG_STYLE_LINUX seems to be making assumptions.
For example, look at init_linux_parameters() in
kexec-tools/kexec/arch/i386/x86-linux-setup.c.
void init_linux_parameters(struct x86_linux_param_header *real_mode)
{
/* Fill in the values that are usually provided by the kernel. */
/* Boot block magic */
memcpy(real_mode->header_magic, "HdrS", 4);
real_mode->protocol_version = 0x0206;
real_mode->initrd_addr_max = DEFAULT_INITRD_ADDR_MAX;
real_mode->cmdline_size = COMMAND_LINE_SIZE;
}
- We have no idea what's the max address we can load initrd at. So we make
assumptions.
- We have no idea what's the maximum command line size kernel suppports. So
we make assumptions. The other side affect of this is that we can't do
error handling properly. I can't tell user back that you are passing
command line which is longer than what kernel can support.
- ELF does not tell anything whether it is self relocating or not. So we
are forced to load it at a address it has been compiled for (In case of
kdump). And that address is already occupied by current running kernel
so it does not work.
For the time being I have written a simple ELF loader along the lines of
kexec-tools. It defaults to ARG_STYLE_LINUX and works only with kexec and
not kexec on panic.
I have also made purgatory a stand alone relocatable object and now
purgatory is doing hash verification.
I am cleaning up the patches and will soon for another round of review
pretty soon.
Thanks
Vivek
_______________________________________________
kexec mailing list
kexec@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/kexec
next prev parent reply other threads:[~2014-01-16 15:13 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-01-09 15:37 Query regarding ELF loader arg style Vivek Goyal
2014-01-15 1:42 ` Eric W. Biederman
2014-01-16 15:13 ` Vivek Goyal [this message]
2014-01-16 23:27 ` Eric W. Biederman
2014-01-17 14:03 ` Vivek Goyal
2014-01-17 18:03 ` Eric W. Biederman
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=20140116151301.GB6156@redhat.com \
--to=vgoyal@redhat.com \
--cc=ebiederm@xmission.com \
--cc=kexec@lists.infradead.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.