help

On Sun, Aug 13, 2023 at 1:17 PM <grub-devel-requ...@gnu.org> wrote:

> Send Grub-devel mailing list submissions to
>         grub-devel@gnu.org
>
> To subscribe or unsubscribe via the World Wide Web, visit
>         https://lists.gnu.org/mailman/listinfo/grub-devel
> or, via email, send a message with subject or body 'help' to
>         grub-devel-requ...@gnu.org
>
> You can reach the person managing the list at
>         grub-devel-ow...@gnu.org
>
> When replying, please edit your Subject line so it is more specific
> than "Re: Contents of Grub-devel digest..."
>
>
> Today's Topics:
>
>    1. Re: [PATCH v9 02/11] Unify GUID types
>       (Vladimir 'phcoder' Serbinenko)
>
>
> ----------------------------------------------------------------------
>
> Message: 1
> Date: Sun, 13 Aug 2023 09:46:45 +0200
> From: "Vladimir 'phcoder' Serbinenko" <phco...@gmail.com>
> To: Pedro Miguel Justo <pm...@texair.net>
> Cc: John Paul Adrian Glaubitz <glaub...@physik.fu-berlin.de>,  The
>         development of GNU GRUB <grub-devel@gnu.org>, Oliver Steffen
>         <ostef...@redhat.com>,  Gerd Hoffmann <kra...@redhat.com>, Frank
>         Scheiner <frank.schei...@web.de>
> Subject: Re: [PATCH v9 02/11] Unify GUID types
> Message-ID:
>         <CAEaD8JOWL9gyWt6qs36pDFioi3uE86YQhp=
> etjir47qgjk6...@mail.gmail.com>
> Content-Type: text/plain; charset="utf-8"
>
> Full analysis: gpt_partentry can be marked as aligned8. But following are
> problem:
> * protocols_per_handle may return unaligned guids
> * configuration_tables array may be unaligned. On efi32 every entry is 20
> bytes, so guids can't be 8-byte aligned
> * The worst offender is device path as it's packed, unpredictable and
> contains uuids.
> * Efiemu gets guid as argument and probably should be able to handle
> unaligned case. So far it's x86 only and we have no mmx and co so it's not
> a problem right now unless we enable ubsan.
> All in all we do need packed guid type unless those are resolved. I attach
> patches for testing. If they work, I'll rearrange them a bit
>
> Le dim. 13 août 2023, 05:27, Vladimir 'phcoder' Serbinenko <
> phco...@gmail.com> a écrit :
>
> >
> >
> > Le dim. 13 août 2023, 00:57, Pedro Miguel Justo <pm...@texair.net> a
> > écrit :
> >
> >>
> >>
> >> > On Aug 12, 2023, at 11:04, John Paul Adrian Glaubitz <
> >> glaub...@physik.fu-berlin.de> wrote:
> >> >
> >> > Hi Daniel!
> >> >
> >> > On Fri, 2023-08-11 at 17:31 +0200, Daniel Kiper wrote:
> >> >> On Fri, Aug 11, 2023 at 04:10:14AM -0700, Oliver Steffen wrote:
> >> >>> Quoting John Paul Adrian Glaubitz (2023-08-11 10:32:17)
> >> >>>> Hi Oliver!
> >> >>>>
> >> >>>> On Fri, 2023-05-26 at 13:35 +0200, Oliver Steffen wrote:
> >> >>>>> There are 3 implementations of a GUID in Grub. Replace them with a
> >> >>>>> common one, placed in types.h.
> >> >>>>>
> >> >>>>> It uses the "packed" flavor of the GUID structs, the alignment
> >> attribute
> >> >>>>> is dropped, since it is not required.
> >> >>>>>
> >> >>>>> Signed-off-by: Oliver Steffen <ostef...@redhat.com>
> >> >>>>> Reviewed-by: Daniel Kiper <daniel.ki...@oracle.com>
> >> >>
> >> >> [...]
> >> >>
> >> >>>> According to [1], this change broke GRUB on ia64:
> >> >>>>
> >> >>>> Welcome to GRUB!
> >> >>>>
> >> >>>> 7 0 0x00006B 0x000000000000001E unexpected trap
> >> >>>> 7 0 0x000066 0x000000000000001E trap taken, number in ext PE
> >> >>>> 7 0 0x00003C 0x0000000000005A00 trap taken, offset in ext PE
> >> >>>>
> >> >>>> I assume this is because of the strict alignment requirements on
> >> ia64.
> >> >>>>
> >> >>>> Could you have a look?
> >> >>>
> >> >>> I am very sorry for this mistake.
> >> >>> My goal was to unify the two GUID types we had in grub but I missed
> >> the
> >> >>> fact that in my "solution" the alignments are not correct in all
> >> cases.
> >> >>>
> >> >>> The quickest way out could be to revert the GUID unification and
> >> printf
> >> >>> format specifier commits:
> >> >>>
> >> >>> 6ad116e5f guid: Make use of GUID printf format specifier
> >> >>> f82dbf2bd kern/misc: Add a format specifier GUIDs
> >> >>> 06edd40db guid: Unify GUID types
> >> >>>
> >> >>> And use the explicit, long-winded format string for printing the
> GUID
> >> >>> in the bli module instead (added in the commits following those).
> >> >>>
> >> >>> I am open to suggestions / comments.
> >> >>
> >> >> Adrian, could you check what will happen when you add alignment to
> the
> >> >> grub_guid_t as it was suggested by Frank here [2]?
> >> >>
> >> >> Personally I would avoid adding another GUID type with just alignment
> >> >> requirement as the difference. Making one GUID type with always
> >> enforced
> >> >> alignment should not cost us a lot. Or we can enforce alignment on
> EFI
> >> >> platforms only.
> >> >
> >> > My Itanium hardware is not available for bootloader tests at the
> >> moment, so I would
> >> > like to ask Pedro Miguel Justo or Frank Scheiner to test the proposed
> >> fix.
> >>
> >>
> >> The reason that before this unification there were a packed and aligned
> >> types suggest that the packed type was necessary in some cases. Frank
> had
> >> shared the concern against his own suggestion that changing the unified
> >> type to be aligned (as opposite to packed) would likely regress the
> cases
> >> where the packed might be needed/expected.
> >>
> >> Just for kicks, I gave it a try:
> >>
> >> ```
> >> diff --git a/include/grub/types.h b/include/grub/types.h
> >> index 0d96006fe..ff415c970 100644
> >> --- a/include/grub/types.h
> >> +++ b/include/grub/types.h
> >> @@ -376,7 +376,7 @@ struct grub_guid
> >>    grub_uint16_t data2;
> >>    grub_uint16_t data3;
> >>    grub_uint8_t data4[8];
> >> -} GRUB_PACKED;
> >> +} __attribute__ ((aligned(8)));
> >>  typedef struct grub_guid grub_guid_t;
> >>
> >>  #endif /* ! GRUB_TYPES_HEADER */
> >> ```
> >>
> >> As hypothesized, there are places where these structs (now unified) are
> >> expected to be packed, meaning to have an alignment of 1 (even smaller
> than
> >> the natural alignment of its larger member).
> >>
> >> One of the cases where the dependency is present is in the
> >> grub_gpt_partentry structure. This structure is packed and includes a
> GUID
> >> field. One struct of an enforced alignment ’n’ cannot host a member with
> >> enforced alignment ‘m’ where m > n. Thus, an 8 byte aligned grub_guid
> >> cannot be hosted inside a 1 byte aligned grub_gpt_partentry:
> >>
> >
> > grub_gpt_partentry doesn't need
> >
> > GRUB_PACKED. To be on a safe side we can
> >
> > add compile time assert on its size
> >
> >
> >
> >> ```
> >> In file included from grub-core/disk/ldm.c:26:
> >> ./include/grub/gpt_partition.h:70:1: error: alignment 1 of ‘struct
> >> grub_gpt_partentry’ is less than 8 [-Werror=packed-not-aligned]
> >>    70 | } GRUB_PACKED;
> >>       | ^
> >> ./include/grub/gpt_partition.h:70:1: error: alignment 1 of ‘struct
> >> grub_gpt_partentry’ is less than 8 [-Werror=packed-not-aligned]
> >> ```
> >>
> >> Now, we could go this rabbit hole on and try to hack grub_gpt_partentry,
> >> or special-case the GUID inside grub_gpt_partentry to be packed… but at
> >> which point will I just end up with the thing we were trying to avoid:
> more
> >> than one definition of GUID?
> >>
> >> >
> >> > Thanks,
> >> > Adrian
> >> >
> >> > --
> >> > .''`.  John Paul Adrian Glaubitz
> >> > : :' :  Debian Developer
> >> > `. `'   Physicist
> >> >  `-    GPG: 62FF 8A75 84E0 2956 9546  0006 7426 3B37 F5B5 F913
> >>
> >>
> -------------- next part --------------
> An HTML attachment was scrubbed...
> URL: <
> https://lists.gnu.org/archive/html/grub-devel/attachments/20230813/b10a3380/attachment.htm
> >
> -------------- next part --------------
> A non-text attachment was scrubbed...
> Name: 0002-Mark-grub_gpt_partentry-as-aligned-to-8-bytes.patch
> Type: text/x-diff
> Size: 723 bytes
> Desc: not available
> URL: <
> https://lists.gnu.org/archive/html/grub-devel/attachments/20230813/b10a3380/attachment.patch
> >
> -------------- next part --------------
> A non-text attachment was scrubbed...
> Name: 0001-Add-missing-static-qualifier.patch
> Type: text/x-diff
> Size: 644 bytes
> Desc: not available
> URL: <
> https://lists.gnu.org/archive/html/grub-devel/attachments/20230813/b10a3380/attachment-0001.patch
> >
> -------------- next part --------------
> A non-text attachment was scrubbed...
> Name: 0004-Add-compile-time-asserts-for-guid-and-gpt_partentry-.patch
> Type: text/x-diff
> Size: 821 bytes
> Desc: not available
> URL: <
> https://lists.gnu.org/archive/html/grub-devel/attachments/20230813/b10a3380/attachment-0002.patch
> >
> -------------- next part --------------
> A non-text attachment was scrubbed...
> Name: 0003-Split-aligned-and-packed-guids.patch
> Type: text/x-diff
> Size: 9171 bytes
> Desc: not available
> URL: <
> https://lists.gnu.org/archive/html/grub-devel/attachments/20230813/b10a3380/attachment-0003.patch
> >
> -------------- next part --------------
> A non-text attachment was scrubbed...
> Name: 0005-Fix-typo.patch
> Type: text/x-diff
> Size: 1078 bytes
> Desc: not available
> URL: <
> https://lists.gnu.org/archive/html/grub-devel/attachments/20230813/b10a3380/attachment-0004.patch
> >
>
> ------------------------------
>
> Subject: Digest Footer
>
> _______________________________________________
> Grub-devel mailing list
> Grub-devel@gnu.org
> https://lists.gnu.org/mailman/listinfo/grub-devel
>
>
> ------------------------------
>
> End of Grub-devel Digest, Vol 234, Issue 14
> *******************************************
>
_______________________________________________
Grub-devel mailing list
Grub-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/grub-devel

Reply via email to