lkml.org 
[lkml]   [2018]   [May]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.16 100/272] powerpc/mpic: Check if cpu_possible() in mpic_physmask()
    Date
    4.16-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Michael Ellerman <mpe@ellerman.id.au>

    [ Upstream commit 0834d627fbea00c1444075eb3e448e1974da452d ]

    In mpic_physmask() we loop over all CPUs up to 32, then get the hard
    SMP processor id of that CPU.

    Currently that's possibly walking off the end of the paca array, but
    in a future patch we will change the paca array to be an array of
    pointers, and in that case we will get a NULL for missing CPUs and
    oops. eg:

    Unable to handle kernel paging request for data at address 0x88888888888888b8
    Faulting instruction address: 0xc00000000004e380
    Oops: Kernel access of bad area, sig: 11 [#1]
    ...
    NIP .mpic_set_affinity+0x60/0x1a0
    LR .irq_do_set_affinity+0x48/0x100

    Fix it by checking the CPU is possible, this also fixes the code if
    there are gaps in the CPU numbering which probably never happens on
    mpic systems but who knows.

    Debugged-by: Nicholas Piggin <npiggin@gmail.com>
    Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
    Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    arch/powerpc/sysdev/mpic.c | 2 +-
    1 file changed, 1 insertion(+), 1 deletion(-)

    --- a/arch/powerpc/sysdev/mpic.c
    +++ b/arch/powerpc/sysdev/mpic.c
    @@ -626,7 +626,7 @@ static inline u32 mpic_physmask(u32 cpum
    int i;
    u32 mask = 0;

    - for (i = 0; i < min(32, NR_CPUS); ++i, cpumask >>= 1)
    + for (i = 0; i < min(32, NR_CPUS) && cpu_possible(i); ++i, cpumask >>= 1)
    mask |= (cpumask & 1) << get_hard_smp_processor_id(i);
    return mask;
    }

    \
     
     \ /
      Last update: 2018-05-28 13:56    [W:4.228 / U:1.148 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site