public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: "PierreGondois" <pierre.gondois@arm.com>
To: devel@edk2.groups.io, Sami Mujawar <sami.mujawar@arm.com>,
	Alexei.Fedorov@arm.com
Subject: [PATCH v3 07/21] DynamicTablesPkg: Clear pointer in node creation fcts
Date: Fri,  8 Oct 2021 15:46:18 +0100	[thread overview]
Message-ID: <20211008144632.31894-8-Pierre.Gondois@arm.com> (raw)
In-Reply-To: <20211008144632.31894-1-Pierre.Gondois@arm.com>

From: Pierre Gondois <Pierre.Gondois@arm.com>

The following functions:
- AmlCreateRootNode()
- AmlCreateObjectNode()
- AmlCreateDataNode()
create a node and return it by populating a pointer. This pointer
should only be considered/used if the function returns successfully.
Otherwise, the value stored in this pointer should be ignored.

For their error handling, some other functions assume that this
pointer is reset to NULL if an error occurs during a node creation.
To make this assumption correct, explicitly clear this input pointer.

Reviewed-by: Sami Mujawar <sami.mujawar@arm.com>
Signed-off-by: Pierre Gondois <Pierre.Gondois@arm.com>
---
 .../Library/Common/AmlLib/CodeGen/AmlCodeGen.c | 10 ++++++++--
 .../AmlLib/CodeGen/AmlResourceDataCodeGen.c    | 10 ++++++++--
 .../Library/Common/AmlLib/Tree/AmlNode.c       | 18 +++++++++++++++---
 .../Library/Common/AmlLib/Tree/AmlNode.h       | 12 +++++++++---
 4 files changed, 40 insertions(+), 10 deletions(-)

diff --git a/DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlCodeGen.c b/DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlCodeGen.c
index 5d310f201319..4775b68cd974 100644
--- a/DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlCodeGen.c
+++ b/DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlCodeGen.c
@@ -22,7 +22,9 @@
   @param [in]  Node           Newly created node.
   @param [in]  ParentNode     If provided, set ParentNode as the parent
                               of the node created.
-  @param [out] NewObjectNode  If success, contains the created object node.
+  @param [out] NewObjectNode  If not NULL:
+                               - and Success, contains the created Node.
+                               - and Error, reset to NULL.
 
   @retval  EFI_SUCCESS            The function completed successfully.
   @retval  EFI_INVALID_PARAMETER  Invalid parameter.
@@ -39,7 +41,7 @@ LinkNode (
   EFI_STATUS    Status;
 
   if (NewObjectNode != NULL) {
-    *NewObjectNode = Node;
+    *NewObjectNode = NULL;
   }
 
   // Add RdNode as the last element.
@@ -51,6 +53,10 @@ LinkNode (
     }
   }
 
+  if (NewObjectNode != NULL) {
+    *NewObjectNode = Node;
+  }
+
   return EFI_SUCCESS;
 }
 
diff --git a/DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlResourceDataCodeGen.c b/DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlResourceDataCodeGen.c
index 089597a6c906..cba942c0fd1a 100644
--- a/DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlResourceDataCodeGen.c
+++ b/DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlResourceDataCodeGen.c
@@ -33,7 +33,9 @@
                             RdNode is then added at the end of the variable
                             list of resource data elements, but before the
                             "End Tag" Resource Data.
-  @param [out] NewRdNode    If not NULL, update the its value to RdNode.
+  @param [out] NewRdNode    If not NULL:
+                             - and Success, contains RdNode.
+                             - and Error, reset to NULL.
 
   @retval  EFI_SUCCESS            The function completed successfully.
   @retval  EFI_INVALID_PARAMETER  Invalid parameter.
@@ -52,7 +54,7 @@ LinkRdNode (
   AML_OBJECT_NODE   *BufferOpNode;
 
   if (NewRdNode != NULL) {
-    *NewRdNode = RdNode;
+    *NewRdNode = NULL;
   }
 
   if (ParentNode != NULL) {
@@ -85,6 +87,10 @@ LinkRdNode (
     }
   }
 
+  if (NewRdNode != NULL) {
+    *NewRdNode = RdNode;
+  }
+
   return Status;
 
 error_handler:
diff --git a/DynamicTablesPkg/Library/Common/AmlLib/Tree/AmlNode.c b/DynamicTablesPkg/Library/Common/AmlLib/Tree/AmlNode.c
index 3740c0ac7bb8..300b07a2efe4 100644
--- a/DynamicTablesPkg/Library/Common/AmlLib/Tree/AmlNode.c
+++ b/DynamicTablesPkg/Library/Common/AmlLib/Tree/AmlNode.c
@@ -79,7 +79,9 @@ AmlDeleteRootNode (
 
   @param  [in]  SdtHeader       Pointer to an ACPI DSDT/SSDT header to copy
                                 the data from.
-  @param  [out] NewRootNodePtr  The created AML_ROOT_NODE.
+  @param  [out] NewRootNodePtr  If success, contains the created
+                                AML_ROOT_NODE.
+                                Otherwise reset to NULL.
 
   @retval EFI_SUCCESS             The function completed successfully.
   @retval EFI_INVALID_PARAMETER   Invalid parameter.
@@ -101,6 +103,8 @@ AmlCreateRootNode (
     return EFI_INVALID_PARAMETER;
   }
 
+  *NewRootNodePtr = NULL;
+
   RootNode = AllocateZeroPool (sizeof (AML_ROOT_NODE));
   if (RootNode == NULL) {
     ASSERT (0);
@@ -163,7 +167,9 @@ AmlDeleteObjectNode (
   @param  [in]  PkgLength         PkgLength of the node if the AmlByteEncoding
                                   has the PkgLen attribute.
                                   0 otherwise.
-  @param  [out] NewObjectNodePtr  The created AML_OBJECT_NODE.
+  @param  [out] NewObjectNodePtr  If success, contains the created
+                                  AML_OBJECT_NODE.
+                                  Otherwise reset to NULL.
 
   @retval EFI_SUCCESS             The function completed successfully.
   @retval EFI_INVALID_PARAMETER   Invalid parameter.
@@ -186,6 +192,8 @@ AmlCreateObjectNode (
     return EFI_INVALID_PARAMETER;
   }
 
+  *NewObjectNodePtr = NULL;
+
   ObjectNode = AllocateZeroPool (sizeof (AML_OBJECT_NODE));
   if (ObjectNode == NULL) {
     ASSERT (0);
@@ -252,7 +260,9 @@ AmlDeleteDataNode (
                                 this node. Data is copied from there.
   @param  [in]  DataSize        Number of bytes to consider at the address
                                 pointed by Data.
-  @param  [out] NewDataNodePtr  The created AML_DATA_NODE.
+  @param  [out] NewDataNodePtr  If success, contains the created
+                                AML_DATA_NODE.
+                                Otherwise reset to NULL.
 
   @retval EFI_SUCCESS             The function completed successfully.
   @retval EFI_INVALID_PARAMETER   Invalid parameter.
@@ -284,6 +294,8 @@ AmlCreateDataNode (
     return EFI_INVALID_PARAMETER;
   }
 
+  *NewDataNodePtr = NULL;
+
   DataNode = AllocateZeroPool (sizeof (AML_DATA_NODE));
   if (DataNode == NULL) {
     ASSERT (0);
diff --git a/DynamicTablesPkg/Library/Common/AmlLib/Tree/AmlNode.h b/DynamicTablesPkg/Library/Common/AmlLib/Tree/AmlNode.h
index 3584b572baae..465a0e2b4b2f 100644
--- a/DynamicTablesPkg/Library/Common/AmlLib/Tree/AmlNode.h
+++ b/DynamicTablesPkg/Library/Common/AmlLib/Tree/AmlNode.h
@@ -17,7 +17,9 @@
 
   @param  [in]  SdtHeader       Pointer to an ACPI DSDT/SSDT header to copy
                                 the data from.
-  @param  [out] NewRootNodePtr  The created AML_ROOT_NODE.
+  @param  [out] NewRootNodePtr  If success, contains the created
+                                AML_ROOT_NODE.
+                                Otherwise reset to NULL.
 
   @retval EFI_SUCCESS             The function completed successfully.
   @retval EFI_INVALID_PARAMETER   Invalid parameter.
@@ -36,7 +38,9 @@ AmlCreateRootNode (
   @param  [in]  PkgLength         PkgLength of the node if the AmlByteEncoding
                                   has the PkgLen attribute.
                                   0 otherwise.
-  @param  [out] NewObjectNodePtr  The created AML_OBJECT_NODE.
+  @param  [out] NewObjectNodePtr  If success, contains the created
+                                  AML_OBJECT_NODE.
+                                  Otherwise reset to NULL.
 
   @retval EFI_SUCCESS             The function completed successfully.
   @retval EFI_INVALID_PARAMETER   Invalid parameter.
@@ -57,7 +61,9 @@ AmlCreateObjectNode (
                                 this node. Data is copied from there.
   @param  [in]  DataSize        Number of bytes to consider at the address
                                 pointed by Data.
-  @param  [out] NewDataNodePtr  The created AML_DATA_NODE.
+  @param  [out] NewDataNodePtr  If success, contains the created
+                                AML_DATA_NODE.
+                                Otherwise reset to NULL.
 
   @retval EFI_SUCCESS             The function completed successfully.
   @retval EFI_INVALID_PARAMETER   Invalid parameter.
-- 
2.17.1


  parent reply	other threads:[~2021-10-08 14:46 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-10-08 14:46 [PATCH v3 00/21] Create a SSDT CPU topology generator PierreGondois
2021-10-08 14:46 ` [PATCH v3 01/21] DynamicTablesPkg: Remove unnecessary includes PierreGondois
2021-10-08 14:46 ` [PATCH v3 02/21] DynamicTablesPkg: Add missing parameter check PierreGondois
2021-10-08 14:46 ` [PATCH v3 03/21] DynamicTablesPkg: Add AddSsdtAcpiHeader() PierreGondois
2021-10-08 14:46 ` [PATCH v3 04/21] DynamicTablesPkg: Add AmlRdSetEndTagChecksum() PierreGondois
2021-10-08 14:46 ` [PATCH v3 05/21] DynamicTablesPkg: Add AmlSetRdListCheckSum() PierreGondois
2021-10-08 14:46 ` [PATCH v3 06/21] DynamicTablesPkg: Set EndTag's Checksum if RdList is modified PierreGondois
2021-10-08 14:46 ` PierreGondois [this message]
2021-10-08 14:46 ` [PATCH v3 08/21] DynamicTablesPkg: Update error handling for node creation PierreGondois
2021-10-08 14:46 ` [PATCH v3 09/21] DynamicTablesPkg: Make AmlNodeGetIntegerValue public PierreGondois
2021-10-08 14:46 ` [PATCH v3 10/21] DynamicTablesPkg: AML Code generation for Register() PierreGondois
2021-10-08 14:46 ` [PATCH v3 11/21] DynamicTablesPkg: AML Code generation for Resource data EndTag PierreGondois
2021-10-08 14:46 ` [PATCH v3 12/21] DynamicTablesPkg: AML code generation for a Package PierreGondois
2021-10-08 14:46 ` [PATCH v3 13/21] DynamicTablesPkg: Helper function to compute package length PierreGondois
2021-10-08 14:46 ` [PATCH v3 14/21] DynamicTablesPkg: AML code generation for a ResourceTemplate PierreGondois
2021-10-08 14:46 ` [PATCH v3 15/21] DynamicTablesPkg: AML code generation for a Method PierreGondois
2021-10-08 14:46 ` [PATCH v3 16/21] DynamicTablesPkg: AML code generation to Return a NameString PierreGondois
2021-10-08 14:46 ` [PATCH v3 17/21] DynamicTablesPkg: AML code generation for a Method returning a NS PierreGondois
2021-10-08 14:46 ` [PATCH v3 18/21] DynamicTablesPkg: AML code generation for a _LPI object PierreGondois
2021-10-08 14:46 ` [PATCH v3 19/21] DynamicTablesPkg: AML code generation to add an _LPI state PierreGondois
2021-10-08 14:46 ` [PATCH v3 20/21] DynamicTablesPkg: Add CM_ARM_LPI_INFO object PierreGondois
2021-10-08 14:46 ` [PATCH v3 21/21] DynamicTablesPkg: SSDT CPU topology and LPI state generator PierreGondois
2021-10-08 16:05 ` [PATCH v3 00/21] Create a SSDT CPU topology generator Sami Mujawar
2021-10-11  1:16   ` 回复: [edk2-devel] " gaoliming
2021-10-11  7:40     ` PierreGondois

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-list from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20211008144632.31894-8-Pierre.Gondois@arm.com \
    --to=devel@edk2.groups.io \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox