[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 10/10] efi: Fix the type of grub_efi_status_t
From: |
Javier Martinez Canillas |
Subject: |
[PATCH 10/10] efi: Fix the type of grub_efi_status_t |
Date: |
Tue, 25 Feb 2020 13:25:53 +0100 |
From: Peter Jones <address@hidden>
Currently, in some builds with some checkers, we see:
1. grub-core/disk/efi/efidisk.c:601: error[shiftTooManyBitsSigned]: Shifting
signed 64-bit value by 63 bits is undefined behaviour
This is because grub_efi_status_t is defined as grub_efi_intn_t, which is
signed, and shifting into the sign bit is not defined behavior. UEFI fixed
this in the spec in 2.3:
2.3 | Change the defined type of EFI_STATUS from INTN to UINTN | May 7, 2009
And the current EDK2 code has:
MdePkg/Include/Base.h-//
MdePkg/Include/Base.h-// Status codes common to all execution phases
MdePkg/Include/Base.h-//
MdePkg/Include/Base.h:typedef UINTN RETURN_STATUS;
MdePkg/Include/Base.h-
MdePkg/Include/Base.h-/**
MdePkg/Include/Base.h- Produces a RETURN_STATUS code with the highest bit set.
MdePkg/Include/Base.h-
MdePkg/Include/Base.h- @param StatusCode The status code value to convert
into a warning code.
MdePkg/Include/Base.h- StatusCode must be in the range
0x00000000..0x7FFFFFFF.
MdePkg/Include/Base.h-
MdePkg/Include/Base.h- @return The value specified by StatusCode with the
highest bit set.
MdePkg/Include/Base.h-
MdePkg/Include/Base.h-**/
MdePkg/Include/Base.h-#define ENCODE_ERROR(StatusCode)
((RETURN_STATUS)(MAX_BIT | (StatusCode)))
MdePkg/Include/Base.h-
MdePkg/Include/Base.h-/**
MdePkg/Include/Base.h- Produces a RETURN_STATUS code with the highest bit
clear.
MdePkg/Include/Base.h-
MdePkg/Include/Base.h- @param StatusCode The status code value to convert
into a warning code.
MdePkg/Include/Base.h- StatusCode must be in the range
0x00000000..0x7FFFFFFF.
MdePkg/Include/Base.h-
MdePkg/Include/Base.h- @return The value specified by StatusCode with the
highest bit clear.
MdePkg/Include/Base.h-
MdePkg/Include/Base.h-**/
MdePkg/Include/Base.h-#define ENCODE_WARNING(StatusCode)
((RETURN_STATUS)(StatusCode))
MdePkg/Include/Base.h-
MdePkg/Include/Base.h-/**
MdePkg/Include/Base.h- Returns TRUE if a specified RETURN_STATUS code is an
error code.
MdePkg/Include/Base.h-
MdePkg/Include/Base.h- This function returns TRUE if StatusCode has the high
bit set. Otherwise, FALSE is returned.
MdePkg/Include/Base.h-
MdePkg/Include/Base.h- @param StatusCode The status code value to evaluate.
MdePkg/Include/Base.h-
MdePkg/Include/Base.h- @retval TRUE The high bit of StatusCode is set.
MdePkg/Include/Base.h- @retval FALSE The high bit of StatusCode is
clear.
MdePkg/Include/Base.h-
MdePkg/Include/Base.h-**/
MdePkg/Include/Base.h-#define RETURN_ERROR(StatusCode)
(((INTN)(RETURN_STATUS)(StatusCode)) < 0)
...
Uefi/UefiBaseType.h:typedef RETURN_STATUS EFI_STATUS;
This patch makes grub's implementation match the Edk2 declaration with regards
to the signedness of the type.
Signed-off-by: Peter Jones <address@hidden>
Signed-off-by: Javier Martinez Canillas <address@hidden>
---
include/grub/efi/api.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/include/grub/efi/api.h b/include/grub/efi/api.h
index 57607438435..d6f4de17d63 100644
--- a/include/grub/efi/api.h
+++ b/include/grub/efi/api.h
@@ -531,7 +531,7 @@ typedef grub_uint64_t grub_efi_uint64_t;
typedef grub_uint8_t grub_efi_char8_t;
typedef grub_uint16_t grub_efi_char16_t;
-typedef grub_efi_intn_t grub_efi_status_t;
+typedef grub_efi_uintn_t grub_efi_status_t;
#define GRUB_EFI_ERROR_CODE(value) \
((((grub_efi_status_t) 1) << (sizeof (grub_efi_status_t) * 8 - 1)) | (value))
--
2.24.1
- [PATCH 00/10] A set of trivial patches from the Fedora package, Javier Martinez Canillas, 2020/02/25
- [PATCH 01/10] linux/getroot: Handle rssd storage device names, Javier Martinez Canillas, 2020/02/25
- [PATCH 02/10] efi: Print more debug info in our module loader, Javier Martinez Canillas, 2020/02/25
- [PATCH 03/10] Makefile: Make libgrub.pp depend on config-util.h, Javier Martinez Canillas, 2020/02/25
- [PATCH 04/10] kern: Add grub_debug_enabled(), Javier Martinez Canillas, 2020/02/25
- [PATCH 05/10] normal/completion: Fix possible NULL pointer dereference, Javier Martinez Canillas, 2020/02/25
- [PATCH 07/10] efi/uga: Use 64 bit for fb_base, Javier Martinez Canillas, 2020/02/25
- [PATCH 08/10] kern: Make grub_error() more verbose, Javier Martinez Canillas, 2020/02/25
- [PATCH 06/10] efi/gop: Add support for BLT_ONLY adapters, Javier Martinez Canillas, 2020/02/25
- [PATCH 10/10] efi: Fix the type of grub_efi_status_t,
Javier Martinez Canillas <=
- [PATCH 09/10] video: Add more debug output on GOP and UGA probing, Javier Martinez Canillas, 2020/02/25
- Re: [PATCH 00/10] A set of trivial patches from the Fedora package, Daniel Kiper, 2020/02/28