tools/libxc/xc_dom_elfloader.c | 9 --------- 1 file changed, 9 deletions(-)
This was probably useful to load ELF Note, but now ELF notes
"should live in a PT_NOTE segment" (elfnote.h).
With notes living in segment, there are no need for sections, so there
is nothing to be stored in the shstrtab.
This patch would allow to write a simpler ELF header for an OVMF blob
(which isn't an ELF) and allow it to be loaded as a PVH kernel. The
header only needs to declare two program segments:
- one to tell an ELF loader where to put the blob,
- one for a Xen ELFNOTE.
The ELFNOTE is to comply to the pvh design which wants the
XEN_ELFNOTE_PHYS32_ENTRY to declare a blob as compaptible with the PVH
boot ABI.
Note that without the ELFNOTE, libxc will load an ELF but with
the plain ELF loader, which doesn't check for shstrtab.
Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
---
tools/libxc/xc_dom_elfloader.c | 9 ---------
1 file changed, 9 deletions(-)
diff --git a/tools/libxc/xc_dom_elfloader.c b/tools/libxc/xc_dom_elfloader.c
index 82b5f2ee79..b327db219d 100644
--- a/tools/libxc/xc_dom_elfloader.c
+++ b/tools/libxc/xc_dom_elfloader.c
@@ -165,15 +165,6 @@ static elf_negerrnoval xc_dom_parse_elf_kernel(struct xc_dom_image *dom)
return rc;
}
- /* Find the section-header strings table. */
- if ( ELF_PTRVAL_INVALID(elf->sec_strtab) )
- {
- xc_dom_panic(dom->xch, XC_INVALID_KERNEL, "%s: ELF image"
- " has no shstrtab", __FUNCTION__);
- rc = -EINVAL;
- goto out;
- }
-
/* parse binary and get xen meta info */
elf_parse_binary(elf);
if ( elf_xen_parse(elf, &dom->parms) != 0 )
--
Anthony PERARD
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel
On Wed, May 15, 2019 at 12:40:15PM +0100, Anthony PERARD wrote: > This was probably useful to load ELF Note, but now ELF notes > "should live in a PT_NOTE segment" (elfnote.h). > > With notes living in segment, there are no need for sections, so there > is nothing to be stored in the shstrtab. > > This patch would allow to write a simpler ELF header for an OVMF blob > (which isn't an ELF) and allow it to be loaded as a PVH kernel. The > header only needs to declare two program segments: > - one to tell an ELF loader where to put the blob, > - one for a Xen ELFNOTE. > > The ELFNOTE is to comply to the pvh design which wants the > XEN_ELFNOTE_PHYS32_ENTRY to declare a blob as compaptible with the PVH > boot ABI. > > Note that without the ELFNOTE, libxc will load an ELF but with > the plain ELF loader, which doesn't check for shstrtab. > > Signed-off-by: Anthony PERARD <anthony.perard@citrix.com> Acked-by: Wei Liu <wei.liu2@citrix.com> _______________________________________________ Xen-devel mailing list Xen-devel@lists.xenproject.org https://lists.xenproject.org/mailman/listinfo/xen-devel
On 15/05/2019 12:40, Anthony PERARD wrote: > This was probably useful to load ELF Note, but now ELF notes > "should live in a PT_NOTE segment" (elfnote.h). > > With notes living in segment, there are no need for sections, so there > is nothing to be stored in the shstrtab. > > This patch would allow to write a simpler ELF header for an OVMF blob > (which isn't an ELF) and allow it to be loaded as a PVH kernel. The > header only needs to declare two program segments: > - one to tell an ELF loader where to put the blob, > - one for a Xen ELFNOTE. > > The ELFNOTE is to comply to the pvh design which wants the > XEN_ELFNOTE_PHYS32_ENTRY to declare a blob as compaptible with the PVH > boot ABI. > > Note that without the ELFNOTE, libxc will load an ELF but with > the plain ELF loader, which doesn't check for shstrtab. > > Signed-off-by: Anthony PERARD <anthony.perard@citrix.com> > --- > tools/libxc/xc_dom_elfloader.c | 9 --------- > 1 file changed, 9 deletions(-) > > diff --git a/tools/libxc/xc_dom_elfloader.c b/tools/libxc/xc_dom_elfloader.c > index 82b5f2ee79..b327db219d 100644 > --- a/tools/libxc/xc_dom_elfloader.c > +++ b/tools/libxc/xc_dom_elfloader.c > @@ -165,15 +165,6 @@ static elf_negerrnoval xc_dom_parse_elf_kernel(struct xc_dom_image *dom) > return rc; > } > > - /* Find the section-header strings table. */ > - if ( ELF_PTRVAL_INVALID(elf->sec_strtab) ) > - { > - xc_dom_panic(dom->xch, XC_INVALID_KERNEL, "%s: ELF image" > - " has no shstrtab", __FUNCTION__); > - rc = -EINVAL; > - goto out; > - } This might be fine for newer binaries, but you'll break older ones. Instead, you should skip searching for strtab if we've already located the Xen notes. ~Andrew _______________________________________________ Xen-devel mailing list Xen-devel@lists.xenproject.org https://lists.xenproject.org/mailman/listinfo/xen-devel
On Wed, May 15, 2019 at 01:07:03PM +0100, Andrew Cooper wrote: > On 15/05/2019 12:40, Anthony PERARD wrote: > > This was probably useful to load ELF Note, but now ELF notes > > "should live in a PT_NOTE segment" (elfnote.h). > > > > With notes living in segment, there are no need for sections, so there > > is nothing to be stored in the shstrtab. > > > > This patch would allow to write a simpler ELF header for an OVMF blob > > (which isn't an ELF) and allow it to be loaded as a PVH kernel. The > > header only needs to declare two program segments: > > - one to tell an ELF loader where to put the blob, > > - one for a Xen ELFNOTE. > > > > The ELFNOTE is to comply to the pvh design which wants the > > XEN_ELFNOTE_PHYS32_ENTRY to declare a blob as compaptible with the PVH > > boot ABI. > > > > Note that without the ELFNOTE, libxc will load an ELF but with > > the plain ELF loader, which doesn't check for shstrtab. > > > > Signed-off-by: Anthony PERARD <anthony.perard@citrix.com> > > --- > > tools/libxc/xc_dom_elfloader.c | 9 --------- > > 1 file changed, 9 deletions(-) > > > > diff --git a/tools/libxc/xc_dom_elfloader.c b/tools/libxc/xc_dom_elfloader.c > > index 82b5f2ee79..b327db219d 100644 > > --- a/tools/libxc/xc_dom_elfloader.c > > +++ b/tools/libxc/xc_dom_elfloader.c > > @@ -165,15 +165,6 @@ static elf_negerrnoval xc_dom_parse_elf_kernel(struct xc_dom_image *dom) > > return rc; > > } > > > > - /* Find the section-header strings table. */ > > - if ( ELF_PTRVAL_INVALID(elf->sec_strtab) ) > > - { > > - xc_dom_panic(dom->xch, XC_INVALID_KERNEL, "%s: ELF image" > > - " has no shstrtab", __FUNCTION__); > > - rc = -EINVAL; > > - goto out; > > - } > > This might be fine for newer binaries, but you'll break older ones. > > Instead, you should skip searching for strtab if we've already located > the Xen notes. :-(, maybe I should have gone futher on explaining why this check is useless (and probably at the wrong place, at least now). The next thing that's done after that check is: elf_parse_binary() elf_xen_parse() Those are located in "xen/common/libelf", and those are the functions that actually takes care of extracting data from the elf. elf_xen_parse() first look for Xen ELFNOTE in the program segments (phdr, PT_NOTE) and skip reading section and strtab if found. So, libelf already does what you asked for ;-). The shstrtab are only used to look for legacy __xen_guest section names. Since ELFNOTEs was used, the name of section aren't looked at. I hope that help. Thanks, -- Anthony PERARD _______________________________________________ Xen-devel mailing list Xen-devel@lists.xenproject.org https://lists.xenproject.org/mailman/listinfo/xen-devel
On Wed, May 15, 2019 at 01:55:30PM +0100, Anthony PERARD wrote: > On Wed, May 15, 2019 at 01:07:03PM +0100, Andrew Cooper wrote: > > On 15/05/2019 12:40, Anthony PERARD wrote: > > > This was probably useful to load ELF Note, but now ELF notes > > > "should live in a PT_NOTE segment" (elfnote.h). > > > > > > With notes living in segment, there are no need for sections, so there > > > is nothing to be stored in the shstrtab. > > > > > > This patch would allow to write a simpler ELF header for an OVMF blob > > > (which isn't an ELF) and allow it to be loaded as a PVH kernel. The > > > header only needs to declare two program segments: > > > - one to tell an ELF loader where to put the blob, > > > - one for a Xen ELFNOTE. > > > > > > The ELFNOTE is to comply to the pvh design which wants the > > > XEN_ELFNOTE_PHYS32_ENTRY to declare a blob as compaptible with the PVH > > > boot ABI. > > > > > > Note that without the ELFNOTE, libxc will load an ELF but with > > > the plain ELF loader, which doesn't check for shstrtab. > > > > > > Signed-off-by: Anthony PERARD <anthony.perard@citrix.com> > > > --- > > > tools/libxc/xc_dom_elfloader.c | 9 --------- > > > 1 file changed, 9 deletions(-) > > > > > > diff --git a/tools/libxc/xc_dom_elfloader.c b/tools/libxc/xc_dom_elfloader.c > > > index 82b5f2ee79..b327db219d 100644 > > > --- a/tools/libxc/xc_dom_elfloader.c > > > +++ b/tools/libxc/xc_dom_elfloader.c > > > @@ -165,15 +165,6 @@ static elf_negerrnoval xc_dom_parse_elf_kernel(struct xc_dom_image *dom) > > > return rc; > > > } > > > > > > - /* Find the section-header strings table. */ > > > - if ( ELF_PTRVAL_INVALID(elf->sec_strtab) ) > > > - { > > > - xc_dom_panic(dom->xch, XC_INVALID_KERNEL, "%s: ELF image" > > > - " has no shstrtab", __FUNCTION__); > > > - rc = -EINVAL; > > > - goto out; > > > - } > > > > This might be fine for newer binaries, but you'll break older ones. > > > > Instead, you should skip searching for strtab if we've already located > > the Xen notes. > > :-(, maybe I should have gone futher on explaining why this check is > useless (and probably at the wrong place, at least now). > > The next thing that's done after that check is: > elf_parse_binary() > elf_xen_parse() > Those are located in "xen/common/libelf", and those are the functions > that actually takes care of extracting data from the elf. > > elf_xen_parse() first look for Xen ELFNOTE in the program segments > (phdr, PT_NOTE) and skip reading section and strtab if found. > > So, libelf already does what you asked for ;-). > > The shstrtab are only used to look for legacy __xen_guest section names. > Since ELFNOTEs was used, the name of section aren't looked at. > > I hope that help. > Andrew, do you still have concern? Wei. > Thanks, > > -- > Anthony PERARD _______________________________________________ Xen-devel mailing list Xen-devel@lists.xenproject.org https://lists.xenproject.org/mailman/listinfo/xen-devel
On 16/05/2019 14:23, Wei Liu wrote: > On Wed, May 15, 2019 at 01:55:30PM +0100, Anthony PERARD wrote: >> On Wed, May 15, 2019 at 01:07:03PM +0100, Andrew Cooper wrote: >>> On 15/05/2019 12:40, Anthony PERARD wrote: >>>> This was probably useful to load ELF Note, but now ELF notes >>>> "should live in a PT_NOTE segment" (elfnote.h). >>>> >>>> With notes living in segment, there are no need for sections, so there >>>> is nothing to be stored in the shstrtab. >>>> >>>> This patch would allow to write a simpler ELF header for an OVMF blob >>>> (which isn't an ELF) and allow it to be loaded as a PVH kernel. The >>>> header only needs to declare two program segments: >>>> - one to tell an ELF loader where to put the blob, >>>> - one for a Xen ELFNOTE. >>>> >>>> The ELFNOTE is to comply to the pvh design which wants the >>>> XEN_ELFNOTE_PHYS32_ENTRY to declare a blob as compaptible with the PVH >>>> boot ABI. >>>> >>>> Note that without the ELFNOTE, libxc will load an ELF but with >>>> the plain ELF loader, which doesn't check for shstrtab. >>>> >>>> Signed-off-by: Anthony PERARD <anthony.perard@citrix.com> >>>> --- >>>> tools/libxc/xc_dom_elfloader.c | 9 --------- >>>> 1 file changed, 9 deletions(-) >>>> >>>> diff --git a/tools/libxc/xc_dom_elfloader.c b/tools/libxc/xc_dom_elfloader.c >>>> index 82b5f2ee79..b327db219d 100644 >>>> --- a/tools/libxc/xc_dom_elfloader.c >>>> +++ b/tools/libxc/xc_dom_elfloader.c >>>> @@ -165,15 +165,6 @@ static elf_negerrnoval xc_dom_parse_elf_kernel(struct xc_dom_image *dom) >>>> return rc; >>>> } >>>> >>>> - /* Find the section-header strings table. */ >>>> - if ( ELF_PTRVAL_INVALID(elf->sec_strtab) ) >>>> - { >>>> - xc_dom_panic(dom->xch, XC_INVALID_KERNEL, "%s: ELF image" >>>> - " has no shstrtab", __FUNCTION__); >>>> - rc = -EINVAL; >>>> - goto out; >>>> - } >>> This might be fine for newer binaries, but you'll break older ones. >>> >>> Instead, you should skip searching for strtab if we've already located >>> the Xen notes. >> :-(, maybe I should have gone futher on explaining why this check is >> useless (and probably at the wrong place, at least now). >> >> The next thing that's done after that check is: >> elf_parse_binary() >> elf_xen_parse() >> Those are located in "xen/common/libelf", and those are the functions >> that actually takes care of extracting data from the elf. >> >> elf_xen_parse() first look for Xen ELFNOTE in the program segments >> (phdr, PT_NOTE) and skip reading section and strtab if found. >> >> So, libelf already does what you asked for ;-). >> >> The shstrtab are only used to look for legacy __xen_guest section names. >> Since ELFNOTEs was used, the name of section aren't looked at. >> >> I hope that help. >> > Andrew, do you still have concern? If libelf goes on to DTRT then fine, but this full explanation needs to be in the commit message. ~Andrew _______________________________________________ Xen-devel mailing list Xen-devel@lists.xenproject.org https://lists.xenproject.org/mailman/listinfo/xen-devel
On Wed, May 15, 2019 at 01:07:03PM +0100, Andrew Cooper wrote: > On 15/05/2019 12:40, Anthony PERARD wrote: > > This was probably useful to load ELF Note, but now ELF notes > > "should live in a PT_NOTE segment" (elfnote.h). > > > > With notes living in segment, there are no need for sections, so there > > is nothing to be stored in the shstrtab. > > > > This patch would allow to write a simpler ELF header for an OVMF blob > > (which isn't an ELF) and allow it to be loaded as a PVH kernel. The > > header only needs to declare two program segments: > > - one to tell an ELF loader where to put the blob, > > - one for a Xen ELFNOTE. > > > > The ELFNOTE is to comply to the pvh design which wants the > > XEN_ELFNOTE_PHYS32_ENTRY to declare a blob as compaptible with the PVH > > boot ABI. > > > > Note that without the ELFNOTE, libxc will load an ELF but with > > the plain ELF loader, which doesn't check for shstrtab. > > > > Signed-off-by: Anthony PERARD <anthony.perard@citrix.com> > > --- > > tools/libxc/xc_dom_elfloader.c | 9 --------- > > 1 file changed, 9 deletions(-) > > > > diff --git a/tools/libxc/xc_dom_elfloader.c b/tools/libxc/xc_dom_elfloader.c > > index 82b5f2ee79..b327db219d 100644 > > --- a/tools/libxc/xc_dom_elfloader.c > > +++ b/tools/libxc/xc_dom_elfloader.c > > @@ -165,15 +165,6 @@ static elf_negerrnoval xc_dom_parse_elf_kernel(struct xc_dom_image *dom) > > return rc; > > } > > > > - /* Find the section-header strings table. */ > > - if ( ELF_PTRVAL_INVALID(elf->sec_strtab) ) > > - { > > - xc_dom_panic(dom->xch, XC_INVALID_KERNEL, "%s: ELF image" > > - " has no shstrtab", __FUNCTION__); > > - rc = -EINVAL; > > - goto out; > > - } > > This might be fine for newer binaries, but you'll break older ones. > > Instead, you should skip searching for strtab if we've already located > the Xen notes. AIUI old binaries always have shstrtab while it isn't always true for new ones. Unfortunately my attempt to figure out the history of this piece of code is futile. Wei. > > ~Andrew _______________________________________________ Xen-devel mailing list Xen-devel@lists.xenproject.org https://lists.xenproject.org/mailman/listinfo/xen-devel
This was probably useful as a sanity check when the "__xen_guest"
section were not legacy. But now ELF notes are prefered and
"should live in a PT_NOTE segment" (elfnote.h).
This check is unnecessary as elf_xen_parse() from xen/common/libelf
will do the right thing and look for ELFNOTEs in the different places
in order of preference. elf_xen_parse() will still be able to also
look for the legacy "__xen_guest" section without the check in libxc.
This patch would allow to write a simpler ELF header for an OVMF blob
(which isn't an ELF) and allow it to be loaded as a PVH kernel. The
header only needs to declare two program segments:
- one to tell an ELF loader where to put the blob,
- one for a Xen ELFNOTE.
The ELFNOTE is to comply to the pvh design which wants the
XEN_ELFNOTE_PHYS32_ENTRY to declare a blob as compaptible with the PVH
boot ABI.
Note that without the ELFNOTE, libxc will load an ELF but with
the plain ELF loader, which doesn't check for shstrtab.
Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
---
Notes:
v2: Rework commit message, explain why the check is unnecessary.
tools/libxc/xc_dom_elfloader.c | 9 ---------
1 file changed, 9 deletions(-)
diff --git a/tools/libxc/xc_dom_elfloader.c b/tools/libxc/xc_dom_elfloader.c
index 82b5f2ee79..b327db219d 100644
--- a/tools/libxc/xc_dom_elfloader.c
+++ b/tools/libxc/xc_dom_elfloader.c
@@ -165,15 +165,6 @@ static elf_negerrnoval xc_dom_parse_elf_kernel(struct xc_dom_image *dom)
return rc;
}
- /* Find the section-header strings table. */
- if ( ELF_PTRVAL_INVALID(elf->sec_strtab) )
- {
- xc_dom_panic(dom->xch, XC_INVALID_KERNEL, "%s: ELF image"
- " has no shstrtab", __FUNCTION__);
- rc = -EINVAL;
- goto out;
- }
-
/* parse binary and get xen meta info */
elf_parse_binary(elf);
if ( elf_xen_parse(elf, &dom->parms) != 0 )
--
Anthony PERARD
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel
© 2016 - 2024 Red Hat, Inc.