lkml.org 
[lkml]   [2020]   [Feb]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.4 284/309] drop_monitor: Do not cancel uninitialized work item
    Date
    From: Ido Schimmel <idosch@mellanox.com>

    [ Upstream commit dfa7f709596be5ca46c070d4f8acbb344322056a ]

    Drop monitor uses a work item that takes care of constructing and
    sending netlink notifications to user space. In case drop monitor never
    started to monitor, then the work item is uninitialized and not
    associated with a function.

    Therefore, a stop command from user space results in canceling an
    uninitialized work item which leads to the following warning [1].

    Fix this by not processing a stop command if drop monitor is not
    currently monitoring.

    [1]
    [ 31.735402] ------------[ cut here ]------------
    [ 31.736470] WARNING: CPU: 0 PID: 143 at kernel/workqueue.c:3032 __flush_work+0x89f/0x9f0
    ...
    [ 31.738120] CPU: 0 PID: 143 Comm: dwdump Not tainted 5.5.0-custom-09491-g16d4077796b8 #727
    [ 31.741968] RIP: 0010:__flush_work+0x89f/0x9f0
    ...
    [ 31.760526] Call Trace:
    [ 31.771689] __cancel_work_timer+0x2a6/0x3b0
    [ 31.776809] net_dm_cmd_trace+0x300/0xef0
    [ 31.777549] genl_rcv_msg+0x5c6/0xd50
    [ 31.781005] netlink_rcv_skb+0x13b/0x3a0
    [ 31.784114] genl_rcv+0x29/0x40
    [ 31.784720] netlink_unicast+0x49f/0x6a0
    [ 31.787148] netlink_sendmsg+0x7cf/0xc80
    [ 31.790426] ____sys_sendmsg+0x620/0x770
    [ 31.793458] ___sys_sendmsg+0xfd/0x170
    [ 31.802216] __sys_sendmsg+0xdf/0x1a0
    [ 31.806195] do_syscall_64+0xa0/0x540
    [ 31.806885] entry_SYSCALL_64_after_hwframe+0x49/0xbe

    Fixes: 8e94c3bc922e ("drop_monitor: Allow user to start monitoring hardware drops")
    Signed-off-by: Ido Schimmel <idosch@mellanox.com>
    Reviewed-by: Jiri Pirko <jiri@mellanox.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    net/core/drop_monitor.c | 4 +++-
    1 file changed, 3 insertions(+), 1 deletion(-)

    --- a/net/core/drop_monitor.c
    +++ b/net/core/drop_monitor.c
    @@ -1004,8 +1004,10 @@ static void net_dm_hw_monitor_stop(struc
    {
    int cpu;

    - if (!monitor_hw)
    + if (!monitor_hw) {
    NL_SET_ERR_MSG_MOD(extack, "Hardware monitoring already disabled");
    + return;
    + }

    monitor_hw = false;


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