[net,v5,0/2] iavf: Fix issues when setting channels concurrency with removing

Message ID 20230509111148.4608-1-dinghui@sangfor.com.cn
Headers
Series iavf: Fix issues when setting channels concurrency with removing |

Message

Ding Hui May 9, 2023, 11:11 a.m. UTC
  The patchset fix two issues which can be reproduced by the following script:

[root@host ~]# cat repro.sh
#!/bin/bash

pf_dbsf="0000:41:00.0"
vf0_dbsf="0000:41:02.0"
g_pids=()

function do_set_numvf()
{
    echo 2 >/sys/bus/pci/devices/${pf_dbsf}/sriov_numvfs
    sleep $((RANDOM%3+1))
    echo 0 >/sys/bus/pci/devices/${pf_dbsf}/sriov_numvfs
    sleep $((RANDOM%3+1))
}

function do_set_channel()
{
    local nic=$(ls -1 --indicator-style=none /sys/bus/pci/devices/${vf0_dbsf}/net/)
    [ -z "$nic" ] && { sleep $((RANDOM%3)) ; return 1; }
    ifconfig $nic 192.168.18.5 netmask 255.255.255.0
    ifconfig $nic up
    ethtool -L $nic combined 1
    ethtool -L $nic combined 4
    sleep $((RANDOM%3))
}

function on_exit()
{
    local pid
    for pid in "${g_pids[@]}"; do
        kill -0 "$pid" &>/dev/null && kill "$pid" &>/dev/null
    done
    g_pids=()
}

trap "on_exit; exit" EXIT

while :; do do_set_numvf ; done &
g_pids+=($!)
while :; do do_set_channel ; done &
g_pids+=($!)

wait


Ding Hui (2):
  iavf: Fix use-after-free in free_netdev
  iavf: Fix out-of-bounds when setting channels on remove

 drivers/net/ethernet/intel/iavf/iavf_ethtool.c | 4 +++-
 drivers/net/ethernet/intel/iavf/iavf_main.c    | 6 +-----
 2 files changed, 4 insertions(+), 6 deletions(-)
  

Comments

Michal Kubiak May 10, 2023, 12:16 p.m. UTC | #1
On Tue, May 09, 2023 at 07:11:46PM +0800, Ding Hui wrote:
> The patchset fix two issues which can be reproduced by the following script:
> 
> [root@host ~]# cat repro.sh
> #!/bin/bash
> 
> pf_dbsf="0000:41:00.0"
> vf0_dbsf="0000:41:02.0"
> g_pids=()
> 
> function do_set_numvf()
> {
>     echo 2 >/sys/bus/pci/devices/${pf_dbsf}/sriov_numvfs
>     sleep $((RANDOM%3+1))
>     echo 0 >/sys/bus/pci/devices/${pf_dbsf}/sriov_numvfs
>     sleep $((RANDOM%3+1))
> }
> 
> function do_set_channel()
> {
>     local nic=$(ls -1 --indicator-style=none /sys/bus/pci/devices/${vf0_dbsf}/net/)
>     [ -z "$nic" ] && { sleep $((RANDOM%3)) ; return 1; }
>     ifconfig $nic 192.168.18.5 netmask 255.255.255.0
>     ifconfig $nic up
>     ethtool -L $nic combined 1
>     ethtool -L $nic combined 4
>     sleep $((RANDOM%3))
> }
> 
> function on_exit()
> {
>     local pid
>     for pid in "${g_pids[@]}"; do
>         kill -0 "$pid" &>/dev/null && kill "$pid" &>/dev/null
>     done
>     g_pids=()
> }
> 
> trap "on_exit; exit" EXIT
> 
> while :; do do_set_numvf ; done &
> g_pids+=($!)
> while :; do do_set_channel ; done &
> g_pids+=($!)
> 
> wait
> 
> 
> Ding Hui (2):
>   iavf: Fix use-after-free in free_netdev
>   iavf: Fix out-of-bounds when setting channels on remove
> 
>  drivers/net/ethernet/intel/iavf/iavf_ethtool.c | 4 +++-
>  drivers/net/ethernet/intel/iavf/iavf_main.c    | 6 +-----
>  2 files changed, 4 insertions(+), 6 deletions(-)
> 
> -- 
> 2.17.1
> 

For the series:
Reviewed-by: Michal Kubiak <michal.kubiak@intel.com>

Thanks,
Michal