[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v4] Avoid crash calling PrintErrMesg from efi_multiboot2
On Tue, Nov 5, 2024 at 2:52 PM Jan Beulich <jbeulich@xxxxxxxx> wrote: > > On 19.08.2024 16:29, Frediano Ziglio wrote: > > --- a/xen/common/efi/boot.c > > +++ b/xen/common/efi/boot.c > > @@ -287,19 +287,36 @@ static bool __init match_guid(const EFI_GUID *guid1, > > const EFI_GUID *guid2) > > /* generic routine for printing error messages */ > > static void __init PrintErrMesg(const CHAR16 *mesg, EFI_STATUS ErrCode) > > { > > - static const CHAR16* const ErrCodeToStr[] __initconstrel = { > > - [~EFI_ERROR_MASK & EFI_NOT_FOUND] = L"Not found", > > - [~EFI_ERROR_MASK & EFI_NO_MEDIA] = L"The device has no > > media", > > - [~EFI_ERROR_MASK & EFI_MEDIA_CHANGED] = L"Media changed", > > - [~EFI_ERROR_MASK & EFI_DEVICE_ERROR] = L"Device error", > > - [~EFI_ERROR_MASK & EFI_VOLUME_CORRUPTED] = L"Volume corrupted", > > - [~EFI_ERROR_MASK & EFI_ACCESS_DENIED] = L"Access denied", > > - [~EFI_ERROR_MASK & EFI_OUT_OF_RESOURCES] = L"Out of resources", > > - [~EFI_ERROR_MASK & EFI_VOLUME_FULL] = L"Volume is full", > > - [~EFI_ERROR_MASK & EFI_SECURITY_VIOLATION] = L"Security > > violation", > > - [~EFI_ERROR_MASK & EFI_CRC_ERROR] = L"CRC error", > > - [~EFI_ERROR_MASK & EFI_COMPROMISED_DATA] = L"Compromised data", > > - [~EFI_ERROR_MASK & EFI_BUFFER_TOO_SMALL] = L"Buffer too small", > > +#define ERROR_MESSAGE_LIST \ > > + ERROR_MESSAGE(EFI_NOT_FOUND, "Not found") \ > > + ERROR_MESSAGE(EFI_NO_MEDIA, "The device has no media") \ > > + ERROR_MESSAGE(EFI_MEDIA_CHANGED, "Media changed") \ > > + ERROR_MESSAGE(EFI_DEVICE_ERROR, "Device error") \ > > + ERROR_MESSAGE(EFI_VOLUME_CORRUPTED, "Volume corrupted") \ > > + ERROR_MESSAGE(EFI_ACCESS_DENIED, "Access denied") \ > > + ERROR_MESSAGE(EFI_OUT_OF_RESOURCES, "Out of resources") \ > > + ERROR_MESSAGE(EFI_VOLUME_FULL, "Volume is full") \ > > + ERROR_MESSAGE(EFI_SECURITY_VIOLATION, "Security violation") \ > > + ERROR_MESSAGE(EFI_CRC_ERROR, "CRC error") \ > > + ERROR_MESSAGE(EFI_COMPROMISED_DATA, "Compromised data") \ > > + ERROR_MESSAGE(EFI_BUFFER_TOO_SMALL, "Buffer too small") > > + > > + static const struct ErrorStrings { > > + CHAR16 start; > > +#undef ERROR_MESSAGE > > +#define ERROR_MESSAGE(code, str) CHAR16 msg_ ## code[sizeof(str)]; > > + ERROR_MESSAGE_LIST > > + } ErrorStrings __initconst = { > > + 0 > > +#undef ERROR_MESSAGE > > +#define ERROR_MESSAGE(code, str) , L ## str > > + ERROR_MESSAGE_LIST > > + }; > > + static const uint16_t ErrCodeToStr[] __initconst = { > > +#undef ERROR_MESSAGE > > +#define ERROR_MESSAGE(code, str) \ > > + [~EFI_ERROR_MASK & code] = offsetof(struct ErrorStrings, msg_ ## > > code), > > + ERROR_MESSAGE_LIST > > }; > > EFI_STATUS ErrIdx = ErrCode & ~EFI_ERROR_MASK; > > > > A while ago Andrew and I discussed this, and I was apparently wrongly > expecting > him to come back here, as (iirc; no record of this that I could find in the > mail > archives, so I'm sorry if my recollection is wrong) he was the one to object. > We > concluded that it wants at least considering to undo the respective part of > 00d5d5ce23e6, finding a different solution to the Clang issue there. > > Jan I thought this patch was already applied. I didn't remember any clang issue. As far as I know, this was delayed by an issue that turned out to be different. So, any reason why not to merge the original patch? Frediano
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |