lkml.org 
[lkml]   [2020]   [Dec]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v4] lan743x: fix for potential NULL pointer dereference with bare card
    Date
    This is the 4th revision of the patch fix for potential null pointer dereference
    with lan743x card.

    The simpliest way to reproduce: boot with bare lan743x and issue "ethtool ethN"
    command where ethN is the interface with lan743x card. Example:

    $ sudo ethtool eth7
    dmesg:
    [ 103.510336] BUG: kernel NULL pointer dereference, address: 0000000000000340
    ...
    [ 103.510836] RIP: 0010:phy_ethtool_get_wol+0x5/0x30 [libphy]
    ...
    [ 103.511629] Call Trace:
    [ 103.511666] lan743x_ethtool_get_wol+0x21/0x40 [lan743x]
    [ 103.511724] dev_ethtool+0x1507/0x29d0
    [ 103.511769] ? avc_has_extended_perms+0x17f/0x440
    [ 103.511820] ? tomoyo_init_request_info+0x84/0x90
    [ 103.511870] ? tomoyo_path_number_perm+0x68/0x1e0
    [ 103.511919] ? tty_insert_flip_string_fixed_flag+0x82/0xe0
    [ 103.511973] ? inet_ioctl+0x187/0x1d0
    [ 103.512016] dev_ioctl+0xb5/0x560
    [ 103.512055] sock_do_ioctl+0xa0/0x140
    [ 103.512098] sock_ioctl+0x2cb/0x3c0
    [ 103.512139] __x64_sys_ioctl+0x84/0xc0
    [ 103.512183] do_syscall_64+0x33/0x80
    [ 103.512224] entry_SYSCALL_64_after_hwframe+0x44/0xa9
    [ 103.512274] RIP: 0033:0x7f54a9cba427
    ...

    Previous versions can be found at:
    v1:
    initial version
    https://lkml.org/lkml/2020/10/28/921

    v2:
    do not return from lan743x_ethtool_set_wol if netdev->phydev == NULL, just skip
    the call of phy_ethtool_set_wol() instead.
    https://lkml.org/lkml/2020/10/31/380

    v3:
    in function lan743x_ethtool_set_wol:
    use ternary operator instead of if-else sentence (review by Markus Elfring)
    return -ENETDOWN instead of -EIO (review by Andrew Lunn)

    v4:
    Sven Van Asbruck noticed that the patch was being applied cleanly to the 5.9
    branch, so the tag “Fixes” was added as Jakub suggested.

    Signed-off-by: Sergej Bauer <sbauer@blackbox.su>
    Reviewed-by: Andrew Lunn <andrew@lunn.ch>
    Reviewed-by: Jakub Kicinski <kuba@kernel.org>
    Fixes: 4d94282afd95 ("lan743x: Add power management support")
    ---
    diff --git a/drivers/net/ethernet/microchip/lan743x_ethtool.c b/drivers/net/ethernet/microchip/lan743x_ethtool.c
    index dcde496da7fb..c5de8f46cdd3 100644
    --- a/drivers/net/ethernet/microchip/lan743x_ethtool.c
    +++ b/drivers/net/ethernet/microchip/lan743x_ethtool.c
    @@ -780,7 +780,9 @@ static void lan743x_ethtool_get_wol(struct net_device *netdev,

    wol->supported = 0;
    wol->wolopts = 0;
    - phy_ethtool_get_wol(netdev->phydev, wol);
    +
    + if (netdev->phydev)
    + phy_ethtool_get_wol(netdev->phydev, wol);

    wol->supported |= WAKE_BCAST | WAKE_UCAST | WAKE_MCAST |
    WAKE_MAGIC | WAKE_PHY | WAKE_ARP;
    @@ -809,9 +811,8 @@ static int lan743x_ethtool_set_wol(struct net_device *netdev,

    device_set_wakeup_enable(&adapter->pdev->dev, (bool)wol->wolopts);

    - phy_ethtool_set_wol(netdev->phydev, wol);
    -
    - return 0;
    + return netdev->phydev ? phy_ethtool_set_wol(netdev->phydev, wol)
    + : -ENETDOWN;
    }
    #endif /* CONFIG_PM */

    \
     
     \ /
      Last update: 2020-12-15 17:16    [W:3.364 / U:0.000 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site