• Ivan Vecera's avatar
    net/sched: flower: Fix wrong handle assignment during filter change · 32eff6ba
    Ivan Vecera authored
    Commit 08a0063d ("net/sched: flower: Move filter handle initialization
    earlier") moved filter handle initialization but an assignment of
    the handle to fnew->handle is done regardless of fold value. This is wrong
    because if fold != NULL (so fold->handle == handle) no new handle is
    allocated and passed handle is assigned to fnew->handle. Then if any
    subsequent action in fl_change() fails then the handle value is
    removed from IDR that is incorrect as we will have still valid old filter
    instance with handle that is not present in IDR.
    Fix this issue by moving the assignment so it is done only when passed
    fold == NULL.
    
    Prior the patch:
    [root@machine tc-testing]# ./tdc.py -d enp1s0f0np0 -e 14be
    Test 14be: Concurrently replace same range of 100k flower filters from 10 tc instances
    exit: 123
    exit: 0
    RTNETLINK answers: Invalid argument
    We have an error talking to the kernel
    Command failed tmp/replace_6:1885
    
    All test results:
    
    1..1
    not ok 1 14be - Concurrently replace same range of 100k flower filters from 10 tc instances
            Command exited with 123, expected 0
    RTNETLINK answers: Invalid argument
    We have an error talking to the kernel
    Command failed tmp/replace_6:1885
    
    After the patch:
    [root@machine tc-testing]# ./tdc.py -d enp1s0f0np0 -e 14be
    Test 14be: Concurrently replace same range of 100k flower filters from 10 tc instances
    
    All test results:
    
    1..1
    ok 1 14be - Concurrently replace same range of 100k flower filters from 10 tc instances
    
    Fixes: 08a0063d ("net/sched: flower: Move filter handle initialization earlier")
    Signed-off-by: default avatarIvan Vecera <ivecera@redhat.com>
    Reviewed-by: default avatarSimon Horman <simon.horman@corigine.com>
    Link: https://lore.kernel.org/r/20230425140604.169881-1-ivecera@redhat.comSigned-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
    32eff6ba
cls_flower.c 99.2 KB