]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/blame - releases/5.11.21/node-fix-device-cleanups-in-error-handling-code.patch
Drop nfc patches from older trees
[thirdparty/kernel/stable-queue.git] / releases / 5.11.21 / node-fix-device-cleanups-in-error-handling-code.patch
CommitLineData
f92b3806
SL
1From ac209ec94bc8936b41c211320d69283bc41896de Mon Sep 17 00:00:00 2001
2From: Sasha Levin <sashal@kernel.org>
3Date: Fri, 9 Apr 2021 14:01:57 +0300
4Subject: node: fix device cleanups in error handling code
5
6From: Dan Carpenter <dan.carpenter@oracle.com>
7
8[ Upstream commit 4ce535ec0084f0d712317cb99d383cad3288e713 ]
9
10We can't use kfree() to free device managed resources so the kfree(dev)
11is against the rules.
12
13It's easier to write this code if we open code the device_register() as
14a device_initialize() and device_add(). That way if dev_set_name() set
15name fails we can call put_device() and it will clean up correctly.
16
17Fixes: acc02a109b04 ("node: Add memory-side caching attributes")
18Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
19Link: https://lore.kernel.org/r/YHA0JUra+F64+NpB@mwanda
20Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
21Signed-off-by: Sasha Levin <sashal@kernel.org>
22---
23 drivers/base/node.c | 26 ++++++++++++--------------
24 1 file changed, 12 insertions(+), 14 deletions(-)
25
26diff --git a/drivers/base/node.c b/drivers/base/node.c
27index 04f71c7bc3f8..ec4bc09c2997 100644
28--- a/drivers/base/node.c
29+++ b/drivers/base/node.c
30@@ -268,21 +268,20 @@ static void node_init_cache_dev(struct node *node)
31 if (!dev)
32 return;
33
34+ device_initialize(dev);
35 dev->parent = &node->dev;
36 dev->release = node_cache_release;
37 if (dev_set_name(dev, "memory_side_cache"))
38- goto free_dev;
39+ goto put_device;
40
41- if (device_register(dev))
42- goto free_name;
43+ if (device_add(dev))
44+ goto put_device;
45
46 pm_runtime_no_callbacks(dev);
47 node->cache_dev = dev;
48 return;
49-free_name:
50- kfree_const(dev->kobj.name);
51-free_dev:
52- kfree(dev);
53+put_device:
54+ put_device(dev);
55 }
56
57 /**
58@@ -319,25 +318,24 @@ void node_add_cache(unsigned int nid, struct node_cache_attrs *cache_attrs)
59 return;
60
61 dev = &info->dev;
62+ device_initialize(dev);
63 dev->parent = node->cache_dev;
64 dev->release = node_cacheinfo_release;
65 dev->groups = cache_groups;
66 if (dev_set_name(dev, "index%d", cache_attrs->level))
67- goto free_cache;
68+ goto put_device;
69
70 info->cache_attrs = *cache_attrs;
71- if (device_register(dev)) {
72+ if (device_add(dev)) {
73 dev_warn(&node->dev, "failed to add cache level:%d\n",
74 cache_attrs->level);
75- goto free_name;
76+ goto put_device;
77 }
78 pm_runtime_no_callbacks(dev);
79 list_add_tail(&info->node, &node->cache_attrs);
80 return;
81-free_name:
82- kfree_const(dev->kobj.name);
83-free_cache:
84- kfree(info);
85+put_device:
86+ put_device(dev);
87 }
88
89 static void node_remove_caches(struct node *node)
90--
912.30.2
92