[edk2-devel] [PATCH] MdePkg/BaseLib: Fix unaligned API prototypes

Marvin Häuser mhaeuser at posteo.de
Sun Aug 8 19:39:46 UTC 2021


C prohibits not only dereferencing but also casting to unaligned
pointers. Thus, the current set of unaligned APIs cannot be called
safely. Update their prototypes to take VOID * pointers, which must
be able to represent any valid pointer.

Cc: Michael D Kinney <michael.d.kinney at intel.com>
Cc: Liming Gao <gaoliming at byosoft.com.cn>
Cc: Zhiguang Liu <zhiguang.liu at intel.com>
Cc: Vitaly Cheptsov <vit9696 at protonmail.com>
Signed-off-by: Marvin Häuser <mhaeuser at posteo.de>
---
 MdePkg/Library/BaseLib/Arm/Unaligned.c | 14 ++++-----
 MdePkg/Library/BaseLib/Unaligned.c     | 32 ++++++++++----------
 MdePkg/Include/Library/BaseLib.h       | 16 +++++-----
 3 files changed, 31 insertions(+), 31 deletions(-)

diff --git a/MdePkg/Library/BaseLib/Arm/Unaligned.c b/MdePkg/Library/BaseLib/Arm/Unaligned.c
index e9934e7003cb..57f19fc44e0b 100644
--- a/MdePkg/Library/BaseLib/Arm/Unaligned.c
+++ b/MdePkg/Library/BaseLib/Arm/Unaligned.c
@@ -59,7 +59,7 @@ ReadUnaligned16 (
 UINT16

 EFIAPI

 WriteUnaligned16 (

-  OUT UINT16                    *Buffer,

+  OUT VOID                      *Buffer,

   IN  UINT16                    Value

   )

 {

@@ -87,7 +87,7 @@ WriteUnaligned16 (
 UINT32

 EFIAPI

 ReadUnaligned24 (

-  IN CONST UINT32              *Buffer

+  IN CONST VOID                *Buffer

   )

 {

   ASSERT (Buffer != NULL);

@@ -116,7 +116,7 @@ ReadUnaligned24 (
 UINT32

 EFIAPI

 WriteUnaligned24 (

-  OUT UINT32                    *Buffer,

+  OUT VOID                      *Buffer,

   IN  UINT32                    Value

   )

 {

@@ -143,7 +143,7 @@ WriteUnaligned24 (
 UINT32

 EFIAPI

 ReadUnaligned32 (

-  IN CONST UINT32              *Buffer

+  IN CONST VOID                *Buffer

   )

 {

   UINT16  LowerBytes;

@@ -175,7 +175,7 @@ ReadUnaligned32 (
 UINT32

 EFIAPI

 WriteUnaligned32 (

-  OUT UINT32                    *Buffer,

+  OUT VOID                      *Buffer,

   IN  UINT32                    Value

   )

 {

@@ -202,7 +202,7 @@ WriteUnaligned32 (
 UINT64

 EFIAPI

 ReadUnaligned64 (

-  IN CONST UINT64              *Buffer

+  IN CONST VOID                *Buffer

   )

 {

   UINT32  LowerBytes;

@@ -234,7 +234,7 @@ ReadUnaligned64 (
 UINT64

 EFIAPI

 WriteUnaligned64 (

-  OUT UINT64                    *Buffer,

+  OUT VOID                      *Buffer,

   IN  UINT64                    Value

   )

 {

diff --git a/MdePkg/Library/BaseLib/Unaligned.c b/MdePkg/Library/BaseLib/Unaligned.c
index a419cb85e53c..3041adcde606 100644
--- a/MdePkg/Library/BaseLib/Unaligned.c
+++ b/MdePkg/Library/BaseLib/Unaligned.c
@@ -26,12 +26,12 @@
 UINT16

 EFIAPI

 ReadUnaligned16 (

-  IN CONST UINT16              *Buffer

+  IN CONST VOID                *Buffer

   )

 {

   ASSERT (Buffer != NULL);

 

-  return *Buffer;

+  return *(CONST UINT16 *) Buffer;

 }

 

 /**

@@ -52,13 +52,13 @@ ReadUnaligned16 (
 UINT16

 EFIAPI

 WriteUnaligned16 (

-  OUT UINT16                    *Buffer,

+  OUT VOID                      *Buffer,

   IN  UINT16                    Value

   )

 {

   ASSERT (Buffer != NULL);

 

-  return *Buffer = Value;

+  return *(UINT16 *) Buffer = Value;

 }

 

 /**

@@ -77,12 +77,12 @@ WriteUnaligned16 (
 UINT32

 EFIAPI

 ReadUnaligned24 (

-  IN CONST UINT32              *Buffer

+  IN CONST VOID                *Buffer

   )

 {

   ASSERT (Buffer != NULL);

 

-  return *Buffer & 0xffffff;

+  return *(CONST UINT32 *) Buffer & 0xffffff;

 }

 

 /**

@@ -103,13 +103,13 @@ ReadUnaligned24 (
 UINT32

 EFIAPI

 WriteUnaligned24 (

-  OUT UINT32                    *Buffer,

+  OUT VOID                      *Buffer,

   IN  UINT32                    Value

   )

 {

   ASSERT (Buffer != NULL);

 

-  *Buffer = BitFieldWrite32 (*Buffer, 0, 23, Value);

+  *(UINT32 *) Buffer = BitFieldWrite32 (*(CONST UINT32 *) Buffer, 0, 23, Value);

   return Value;

 }

 

@@ -129,12 +129,12 @@ WriteUnaligned24 (
 UINT32

 EFIAPI

 ReadUnaligned32 (

-  IN CONST UINT32              *Buffer

+  IN CONST VOID                *Buffer

   )

 {

   ASSERT (Buffer != NULL);

 

-  return *Buffer;

+  return *(CONST UINT32 *) Buffer;

 }

 

 /**

@@ -155,13 +155,13 @@ ReadUnaligned32 (
 UINT32

 EFIAPI

 WriteUnaligned32 (

-  OUT UINT32                    *Buffer,

+  OUT VOID                      *Buffer,

   IN  UINT32                    Value

   )

 {

   ASSERT (Buffer != NULL);

 

-  return *Buffer = Value;

+  return *(UINT32 *) Buffer = Value;

 }

 

 /**

@@ -180,12 +180,12 @@ WriteUnaligned32 (
 UINT64

 EFIAPI

 ReadUnaligned64 (

-  IN CONST UINT64              *Buffer

+  IN CONST VOID                *Buffer

   )

 {

   ASSERT (Buffer != NULL);

 

-  return *Buffer;

+  return *(CONST UINT64 *) Buffer;

 }

 

 /**

@@ -206,11 +206,11 @@ ReadUnaligned64 (
 UINT64

 EFIAPI

 WriteUnaligned64 (

-  OUT UINT64                    *Buffer,

+  OUT VOID                      *Buffer,

   IN  UINT64                    Value

   )

 {

   ASSERT (Buffer != NULL);

 

-  return *Buffer = Value;

+  return *(UINT64 *) Buffer = Value;

 }

diff --git a/MdePkg/Include/Library/BaseLib.h b/MdePkg/Include/Library/BaseLib.h
index 2452c1d92e51..4d30f0539c6b 100644
--- a/MdePkg/Include/Library/BaseLib.h
+++ b/MdePkg/Include/Library/BaseLib.h
@@ -3420,7 +3420,7 @@ DivS64x64Remainder (
 UINT16

 EFIAPI

 ReadUnaligned16 (

-  IN CONST UINT16              *Buffer

+  IN CONST VOID                *Buffer

   );

 

 

@@ -3442,7 +3442,7 @@ ReadUnaligned16 (
 UINT16

 EFIAPI

 WriteUnaligned16 (

-  OUT UINT16                    *Buffer,

+  OUT VOID                      *Buffer,

   IN  UINT16                    Value

   );

 

@@ -3463,7 +3463,7 @@ WriteUnaligned16 (
 UINT32

 EFIAPI

 ReadUnaligned24 (

-  IN CONST UINT32              *Buffer

+  IN CONST VOID                *Buffer

   );

 

 

@@ -3485,7 +3485,7 @@ ReadUnaligned24 (
 UINT32

 EFIAPI

 WriteUnaligned24 (

-  OUT UINT32                    *Buffer,

+  OUT VOID                      *Buffer,

   IN  UINT32                    Value

   );

 

@@ -3506,7 +3506,7 @@ WriteUnaligned24 (
 UINT32

 EFIAPI

 ReadUnaligned32 (

-  IN CONST UINT32              *Buffer

+  IN CONST VOID                *Buffer

   );

 

 

@@ -3528,7 +3528,7 @@ ReadUnaligned32 (
 UINT32

 EFIAPI

 WriteUnaligned32 (

-  OUT UINT32                    *Buffer,

+  OUT VOID                      *Buffer,

   IN  UINT32                    Value

   );

 

@@ -3549,7 +3549,7 @@ WriteUnaligned32 (
 UINT64

 EFIAPI

 ReadUnaligned64 (

-  IN CONST UINT64              *Buffer

+  IN CONST VOID                *Buffer

   );

 

 

@@ -3571,7 +3571,7 @@ ReadUnaligned64 (
 UINT64

 EFIAPI

 WriteUnaligned64 (

-  OUT UINT64                    *Buffer,

+  OUT VOID                      *Buffer,

   IN  UINT64                    Value

   );

 

-- 
2.31.1



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#78888): https://edk2.groups.io/g/devel/message/78888
Mute This Topic: https://groups.io/mt/84754062/1813853
Group Owner: devel+owner at edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [edk2-devel-archive at redhat.com]
-=-=-=-=-=-=-=-=-=-=-=-






More information about the edk2-devel-archive mailing list