lkml.org 
[lkml]   [2019]   [Oct]   [2]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    SubjectRE: [PATCH AUTOSEL 5.3 169/203] x86/platform/uv: Fix kmalloc() NULL check routine
    Date
    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@gmail.com>
    > >>
    > >> [ 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@gmail.com>
    ...
    > >> ---
    > >> 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)

    \
     
     \ /
      Last update: 2019-10-02 10:34    [W:5.970 / U:0.060 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site