2021-12-13 03:31:45

by Xiaoke Wang

[permalink] [raw]
Subject: [PATCH] cgroup: check the return value of kstrdup()

kstrdup() returns NULL when some internal memory errors happen, it is
better to check the return value of it so to catch the memory error in
time.

Signed-off-by: Xiaoke Wang <[email protected]>
---
kernel/cgroup/cgroup.c | 3 +++
1 file changed, 3 insertions(+)

diff --git a/kernel/cgroup/cgroup.c b/kernel/cgroup/cgroup.c
index ea08f01..47c7d58 100644
--- a/kernel/cgroup/cgroup.c
+++ b/kernel/cgroup/cgroup.c
@@ -2228,6 +2228,9 @@ static int cpuset_init_fs_context(struct fs_context *fc)
struct cgroup_fs_context *ctx;
int err;

+ if (!agent)
+ return -ENOMEM;
+
err = cgroup_init_fs_context(fc);
if (err) {
kfree(agent);
--


2021-12-13 04:32:58

by Joe Perches

[permalink] [raw]
Subject: Re: [PATCH] cgroup: check the return value of kstrdup()

On Mon, 2021-12-13 at 11:30 +0800, Xiaoke Wang wrote:
> kstrdup() returns NULL when some internal memory errors happen, it is
> better to check the return value of it so to catch the memory error in
> time.
[]
> diff --git a/kernel/cgroup/cgroup.c b/kernel/cgroup/cgroup.c
[]
> @@ -2228,6 +2228,9 @@ static int cpuset_init_fs_context(struct fs_context *fc)
> struct cgroup_fs_context *ctx;
> int err;
>
> + if (!agent)
> + return -ENOMEM;
> +

Did you read all the other code that uses this?
Does it matter if it's NULL?
Why is it created with kstrdup in the first place?
Why should agent be anything other than const char *?
If it's const char * it shouldn't need to be used with
kstrdup/kfree.