On Mon, May 20, 2019 at 11:26:20PM -0400, Nicolas Pitre wrote: > On Tue, 21 May 2019, Gen Zhang wrote: > > > On Mon, May 20, 2019 at 10:55:40PM -0400, Nicolas Pitre wrote: > > > On Tue, 21 May 2019, Gen Zhang wrote: > > > > > > > In function con_init(), the pointer variable vc_cons[currcons].d, vc and > > > > vc->vc_screenbuf is allocated a memory space via kzalloc(). And they are > > > > used in the following codes. > > > > However, when there is a memory allocation error, kzalloc() can fail. > > > > Thus null pointer (vc_cons[currcons].d, vc and vc->vc_screenbuf) > > > > dereference may happen. And it will cause the kernel to crash. > > > > Therefore, > > > > we should check return value and handle the error. > > > > Further,the loop condition MIN_NR_CONSOLES is defined as 1 in > > > > include/uapi/linux/vt.h. So there is no need to unwind the loop. > > > > > > But what if someone changes that define? It won't be obvious that some > > > code did rely on it to be defined to 1. > > I re-examine the source code. MIN_NR_CONSOLES is only defined once and > > no other changes to it. > > Yes, that is true today. But if someone changes that in the future, how > will that person know that you relied on it to be 1 for not needing to > unwind the loop? > > > Nicolas Hi Nicolas, Thanks for your explaination! And I got your point. And is this way proper?
err_vc_screenbuf: kfree(vc); for (currcons = 0; currcons < MIN_NR_CONSOLES; currcons++) vc_cons[currcons].d = NULL; return -ENOMEM; err_vc: console_unlock(); return -ENOMEM; Thanks Gen