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 <blackgod016...@gmail.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); }