lkml.org 
[lkml]   [2022]   [Aug]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.4 339/389] net: dsa: mv88e6060: prevent crash on an unused port
    Date
    From: Sergei Antonov <saproj@gmail.com>

    commit 246bbf2f977ea36aaf41f5d24370fef433250728 upstream.

    If the port isn't a CPU port nor a user port, 'cpu_dp'
    is a null pointer and a crash happened on dereferencing
    it in mv88e6060_setup_port():

    [ 9.575872] Unable to handle kernel NULL pointer dereference at virtual address 00000014
    ...
    [ 9.942216] mv88e6060_setup from dsa_register_switch+0x814/0xe84
    [ 9.948616] dsa_register_switch from mdio_probe+0x2c/0x54
    [ 9.954433] mdio_probe from really_probe.part.0+0x98/0x2a0
    [ 9.960375] really_probe.part.0 from driver_probe_device+0x30/0x10c
    [ 9.967029] driver_probe_device from __device_attach_driver+0xb8/0x13c
    [ 9.973946] __device_attach_driver from bus_for_each_drv+0x90/0xe0
    [ 9.980509] bus_for_each_drv from __device_attach+0x110/0x184
    [ 9.986632] __device_attach from bus_probe_device+0x8c/0x94
    [ 9.992577] bus_probe_device from deferred_probe_work_func+0x78/0xa8
    [ 9.999311] deferred_probe_work_func from process_one_work+0x290/0x73c
    [ 10.006292] process_one_work from worker_thread+0x30/0x4b8
    [ 10.012155] worker_thread from kthread+0xd4/0x10c
    [ 10.017238] kthread from ret_from_fork+0x14/0x3c

    Fixes: 0abfd494deef ("net: dsa: use dedicated CPU port")
    CC: Vivien Didelot <vivien.didelot@savoirfairelinux.com>
    CC: Florian Fainelli <f.fainelli@gmail.com>
    Signed-off-by: Sergei Antonov <saproj@gmail.com>
    Signed-off-by: Vladimir Oltean <olteanv@gmail.com>
    Link: https://lore.kernel.org/r/20220811070939.1717146-1-saproj@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    drivers/net/dsa/mv88e6060.c | 3 +++
    1 file changed, 3 insertions(+)

    --- a/drivers/net/dsa/mv88e6060.c
    +++ b/drivers/net/dsa/mv88e6060.c
    @@ -117,6 +117,9 @@ static int mv88e6060_setup_port(struct m
    int addr = REG_PORT(p);
    int ret;

    + if (dsa_is_unused_port(priv->ds, p))
    + return 0;
    +
    /* Do not force flow control, disable Ingress and Egress
    * Header tagging, disable VLAN tunneling, and set the port
    * state to Forwarding. Additionally, if this is the CPU

    \
     
     \ /
      Last update: 2022-08-23 13:55    [W:7.989 / U:0.724 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site