[<prev] [next>] [day] [month] [year] [list]
Message-ID: <20190522010455.GA4093@zhanggen-UX430UQ>
Date: Wed, 22 May 2019 09:04:55 +0800
From: Gen Zhang <blackgod016574@...il.com>
To: lizhijian@...fujitsu.com
Cc: linux-kernel@...r.kernel.org
Subject: [PATCH] initramfs: Fix a missing-check bug in init/initramfs.c
In dir_add(), de and de->name are allocated by kmalloc() and kstrdup().
And de->name is dereferenced in the following codes. However, memory
allocation functions such as kmalloc() and kstrdup() may fail.
Dereferencing this de->name null pointer may cause the kernel go wrong.
Thus we should check this allocation.
Further, if kstrdup() returns NULL, we should free de and panic().
Signed-off-by: Gen Zhang <blackgod016574@...il.com>
---
diff --git a/init/initramfs.c b/init/initramfs.c
index 178130f..dc8063f 100644
--- a/init/initramfs.c
+++ b/init/initramfs.c
@@ -125,6 +125,10 @@ static void __init dir_add(const char *name, time64_t mtime)
panic("can't allocate dir_entry buffer");
INIT_LIST_HEAD(&de->list);
de->name = kstrdup(name, GFP_KERNEL);
+ if (!de->name) {
+ kfree(de);
+ panic("can't allocate dir_entry name buffer");
+ }
de->mtime = mtime;
list_add(&de->list, &dir_list);
}
Powered by blists - more mailing lists