Re: [PATCH] drivers/base/node: Handle error properly in register_one_node()

From: Donet Tom
Date: Mon Jul 07 2025 - 00:02:17 EST



On 7/4/25 5:59 PM, David Hildenbrand wrote:
On 02.07.25 14:59, Donet Tom wrote:

On 7/2/25 6:16 PM, Oscar Salvador wrote:
On Wed, Jul 02, 2025 at 06:28:56AM -0500, Donet Tom wrote:
If register_node() returns an error, it is not handled correctly.
The function will proceed further and try to register CPUs under the
node, which is not correct.

So, in this patch, if register_node() returns an error, we return
immediately from the function.

Signed-off-by: Donet Tom <donettom@xxxxxxxxxxxxx>
---

...
diff --git a/drivers/base/node.c b/drivers/base/node.c
index bef84f01712f..aec991b4c0b2 100644
--- a/drivers/base/node.c
+++ b/drivers/base/node.c
@@ -885,6 +885,8 @@ int register_one_node(int nid)
       node_devices[nid] = node;
          error = register_node(node_devices[nid], nid);
+    if (error)
+        return error;
Ok, all current callers (based on mm-unstable) panic or BUG() if this fails,
but powerpc, in init_phb_dynamic(), which keeps on going.
Unless it panics somewhere down the road as well.

So I think we need to:

   node_devices[nid] = NULL
   kfree(node)

   ?


Yes, I will add this too.

But one question: if register_node() fails, is it okay to continue, or
should we panic?

What is the correct way to handle this?

panic() or BUG() is not the answer :)

Try to recover ...

Got it, thank you very much, David.