From: Sasha Levin > Sent: 01 October 2019 17:06 > Subject: Re: [PATCH AUTOSEL 5.3 169/203] x86/platform/uv: Fix kmalloc() NULL check routine > > On Sun, Sep 22, 2019 at 10:25:44PM +0200, Greg KH wrote: > >On Sun, Sep 22, 2019 at 02:43:15PM -0400, Sasha Levin wrote: > >> From: Austin Kim <austindh.kim@xxxxxxxxx> > >> > >> [ Upstream commit 864b23f0169d5bff677e8443a7a90dfd6b090afc ] > >> > >> The result of kmalloc() should have been checked ahead of below statement: > >> > >> pqp = (struct bau_pq_entry *)vp; > >> > >> Move BUG_ON(!vp) before above statement. > >> > >> Signed-off-by: Austin Kim <austindh.kim@xxxxxxxxx> ... > >> --- > >> arch/x86/platform/uv/tlb_uv.c | 4 ++-- > >> 1 file changed, 2 insertions(+), 2 deletions(-) > >> > >> diff --git a/arch/x86/platform/uv/tlb_uv.c b/arch/x86/platform/uv/tlb_uv.c > >> index 20c389a91b803..5f0a96bf27a1f 100644 > >> --- a/arch/x86/platform/uv/tlb_uv.c > >> +++ b/arch/x86/platform/uv/tlb_uv.c > >> @@ -1804,9 +1804,9 @@ static void pq_init(int node, int pnode) > >> > >> plsize = (DEST_Q_SIZE + 1) * sizeof(struct bau_pq_entry); > >> vp = kmalloc_node(plsize, GFP_KERNEL, node); > >> - pqp = (struct bau_pq_entry *)vp; > >> - BUG_ON(!pqp); > >> + BUG_ON(!vp); > >> > >> + pqp = (struct bau_pq_entry *)vp; > >> cp = (char *)pqp + 31; > >> pqp = (struct bau_pq_entry *)(((unsigned long)cp >> 5) << 5); > >> > > > >How did this even get merged in the first place? I thought a number of > >us complained about it. > > > >This isn't any change in code, and the original is just fine, the author > >didn't realize how C works :( Mind you, the code itself if pretty horrid. Looks like it is aligning to 32 bytes, easier done by: pqp = (void *)((unsigned long)vp + 31 & ~31); (and there's a roundup macro to obfuscate it somewhere.) But I'd also expect to see a matching '+ 31' in the size passed to kmalloc(). Not to mention a comment! David - Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1PT, UK Registration No: 1397386 (Wales)