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

Marvin Häuser posted 1 patch 2 years, 8 months ago
Failed in applying to current master (apply log)
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(-)
[edk2-devel] [PATCH] MdePkg/BaseLib: Fix unaligned API prototypes
Posted by Marvin Häuser 2 years, 8 months ago
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@intel.com>
Cc: Liming Gao <gaoliming@byosoft.com.cn>
Cc: Zhiguang Liu <zhiguang.liu@intel.com>
Cc: Vitaly Cheptsov <vit9696@protonmail.com>
Signed-off-by: Marvin Häuser <mhaeuser@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/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-


[edk2-devel] [PATCH] BaseTools/CommonLib: Fix unaligned API prototypes
Posted by Marvin Häuser 2 years, 8 months ago
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: Bob Feng <bob.c.feng@intel.com>
Cc: Liming Gao <gaoliming@byosoft.com.cn>
Cc: Yuwei Chen <yuwei.chen@intel.com>
Cc: Vitaly Cheptsov <vit9696@protonmail.com>
Signed-off-by: Marvin Häuser <mhaeuser@posteo.de>
---
 BaseTools/Source/C/Common/CommonLib.c | 16 ++++++++--------
 BaseTools/Source/C/Common/CommonLib.h |  8 ++++----
 2 files changed, 12 insertions(+), 12 deletions(-)

diff --git a/BaseTools/Source/C/Common/CommonLib.c b/BaseTools/Source/C/Common/CommonLib.c
index 7fb4ab764fcd..f1223fb2ae0a 100644
--- a/BaseTools/Source/C/Common/CommonLib.c
+++ b/BaseTools/Source/C/Common/CommonLib.c
@@ -1154,23 +1154,23 @@ StrSize (
 

 UINT64

 ReadUnaligned64 (

-   CONST UINT64              *Buffer

+   CONST VOID                *Buffer

   )

 {

   ASSERT (Buffer != NULL);

 

-  return *Buffer;

+  return *(CONST UINT64 *) Buffer;

 }

 

 UINT64

 WriteUnaligned64 (

-   UINT64                    *Buffer,

+   VOID                      *Buffer,

    UINT64                    Value

   )

 {

   ASSERT (Buffer != NULL);

 

-  return *Buffer = Value;

+  return *(UINT64 *) Buffer = Value;

 }

 

 

@@ -2018,23 +2018,23 @@ AllocatePool (
 

 UINT16

 WriteUnaligned16 (

-  UINT16                    *Buffer,

+  VOID                      *Buffer,

   UINT16                    Value

   )

 {

   ASSERT (Buffer != NULL);

 

-  return *Buffer = Value;

+  return *(UINT16 *) Buffer = Value;

 }

 

 UINT16

 ReadUnaligned16 (

-  CONST UINT16              *Buffer

+  CONST VOID                *Buffer

   )

 {

   ASSERT (Buffer != NULL);

 

-  return *Buffer;

+  return *(CONST UINT16 *) Buffer;

 }

 /**

   Return whether the integer string is a hex string.

diff --git a/BaseTools/Source/C/Common/CommonLib.h b/BaseTools/Source/C/Common/CommonLib.h
index 0f05d88db206..67c42a91765d 100644
--- a/BaseTools/Source/C/Common/CommonLib.h
+++ b/BaseTools/Source/C/Common/CommonLib.h
@@ -238,13 +238,13 @@ CopyGuid (
 

 UINT64

 WriteUnaligned64 (

-   UINT64                    *Buffer,

+   VOID                      *Buffer,

    UINT64                    Value

   );

 

 UINT64

 ReadUnaligned64 (

-   CONST UINT64              *Buffer

+   CONST VOID                *Buffer

   );

 

 UINTN

@@ -363,13 +363,13 @@ AllocatePool (
 

 UINT16

 WriteUnaligned16 (

-  UINT16                    *Buffer,

+  VOID                      *Buffer,

   UINT16                    Value

   );

 

 UINT16

 ReadUnaligned16 (

-  CONST UINT16              *Buffer

+  CONST VOID                *Buffer

   );

 

 VOID *

-- 
2.31.1



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#78896): https://edk2.groups.io/g/devel/message/78896
Mute This Topic: https://groups.io/mt/84754071/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-