• Anatolii Gerasymenko's avatar
    ice: ethtool: Prohibit improper channel config for DCB · a632b2a4
    Anatolii Gerasymenko authored
    Do not allow setting less channels, than Traffic Classes there are
    via ethtool. There must be at least one channel per Traffic Class.
    
    If you set less channels, than Traffic Classes there are, then during
    ice_vsi_rebuild there would be allocated only the requested amount
    of tx/rx rings in ice_vsi_alloc_arrays. But later in ice_vsi_setup_q_map
    there would be requested at least one channel per Traffic Class. This
    results in setting num_rxq > alloc_rxq and num_txq > alloc_txq.
    Later, there would be a NULL pointer dereference in
    ice_vsi_map_rings_to_vectors, because we go beyond of rx_rings or
    tx_rings arrays.
    
    Change ice_set_channels() to return error if you try to allocate less
    channels, than Traffic Classes there are.
    Change ice_vsi_setup_q_map() and ice_vsi_setup_q_map_mqprio() to return
    status code instead of void.
    Add error handling for ice_vsi_setup_q_map() and
    ice_vsi_setup_q_map_mqprio() in ice_vsi_init() and ice_vsi_cfg_tc().
    
    [53753.889983] INFO: Flow control is disabled for this traffic class (0) on this vsi.
    [53763.984862] BUG: unable to handle kernel NULL pointer dereference at 0000000000000028
    [53763.992915] PGD 14b45f5067 P4D 0
    [53763.996444] Oops: 0002 [#1] SMP NOPTI
    [53764.000312] CPU: 12 PID: 30661 Comm: ethtool Kdump: loaded Tainted: GOE    --------- -  - 4.18.0-240.el8.x86_64 #1
    [53764.011825] Hardware name: Intel Corporation WilsonCity/WilsonCity, BIOS WLYDCRB1.SYS.0020.P21.2012150710 12/15/2020
    [53764.022584] RIP: 0010:ice_vsi_map_rings_to_vectors+0x7e/0x120 [ice]
    [53764.029089] Code: 41 0d 0f b7 b7 12 05 00 00 0f b6 d0 44 29 de 44 0f b7 c6 44 01 c2 41 39 d0 7d 2d 4c 8b 47 28 44 0f b7 ce 83 c6 01 4f 8b 04 c8 <49> 89 48 28 4                           c 8b 89 b8 01 00 00 4d 89 08 4c 89 81 b8 01 00 00 44
    [53764.048379] RSP: 0018:ff550dd88ea47b20 EFLAGS: 00010206
    [53764.053884] RAX: 0000000000000002 RBX: 0000000000000004 RCX: ff385ea42fa4a018
    [53764.061301] RDX: 0000000000000006 RSI: 0000000000000005 RDI: ff385e9baeedd018
    [53764.068717] RBP: 0000000000000010 R08: 0000000000000000 R09: 0000000000000004
    [53764.076133] R10: 0000000000000002 R11: 0000000000000004 R12: 0000000000000000
    [53764.083553] R13: 0000000000000000 R14: ff385e658fdd9000 R15: ff385e9baeedd018
    [53764.090976] FS:  000014872c5b5740(0000) GS:ff385e847f100000(0000) knlGS:0000000000000000
    [53764.099362] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [53764.105409] CR2: 0000000000000028 CR3: 0000000a820fa002 CR4: 0000000000761ee0
    [53764.112851] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
    [53764.120301] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
    [53764.127747] PKRU: 55555554
    [53764.130781] Call Trace:
    [53764.133564]  ice_vsi_rebuild+0x611/0x870 [ice]
    [53764.138341]  ice_vsi_recfg_qs+0x94/0x100 [ice]
    [53764.143116]  ice_set_channels+0x1a8/0x3e0 [ice]
    [53764.147975]  ethtool_set_channels+0x14e/0x240
    [53764.152667]  dev_ethtool+0xd74/0x2a10
    [53764.156665]  ? __mod_lruvec_state+0x44/0x110
    [53764.161280]  ? __mod_lruvec_state+0x44/0x110
    [53764.165893]  ? page_add_file_rmap+0x15/0x170
    [53764.170518]  ? inet_ioctl+0xd1/0x220
    [53764.174445]  ? netdev_run_todo+0x5e/0x290
    [53764.178808]  dev_ioctl+0xb5/0x550
    [53764.182485]  sock_do_ioctl+0xa0/0x140
    [53764.186512]  sock_ioctl+0x1a8/0x300
    [53764.190367]  ? selinux_file_ioctl+0x161/0x200
    [53764.195090]  do_vfs_ioctl+0xa4/0x640
    [53764.199035]  ksys_ioctl+0x60/0x90
    [53764.202722]  __x64_sys_ioctl+0x16/0x20
    [53764.206845]  do_syscall_64+0x5b/0x1a0
    [53764.210887]  entry_SYSCALL_64_after_hwframe+0x65/0xca
    
    Fixes: 87324e74 ("ice: Implement ethtool ops for channels")
    Signed-off-by: default avatarAnatolii Gerasymenko <anatolii.gerasymenko@intel.com>
    Tested-by: Gurucharan <gurucharanx.g@intel.com> (A Contingent worker at Intel)
    Signed-off-by: default avatarTony Nguyen <anthony.l.nguyen@intel.com>
    a632b2a4
ice_ethtool.c 121 KB