• Karsten Graul's avatar
    net/smc: fix use-after-free of delayed events · d535ca13
    Karsten Graul authored
    When a delayed event is enqueued then the event worker will send this
    event the next time it is running and no other flow is currently
    active. The event handler is called for the delayed event, and the
    pointer to the event keeps set in lgr->delayed_event. This pointer is
    cleared later in the processing by smc_llc_flow_start().
    This can lead to a use-after-free condition when the processing does not
    reach smc_llc_flow_start(), but frees the event because of an error
    situation. Then the delayed_event pointer is still set but the event is
    freed.
    Fix this by always clearing the delayed event pointer when the event is
    provided to the event handler for processing, and remove the code to
    clear it in smc_llc_flow_start().
    
    Fixes: 555da9af ("net/smc: add event-based llc_flow framework")
    Signed-off-by: default avatarKarsten Graul <kgraul@linux.ibm.com>
    Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
    d535ca13
smc_llc.c 53.5 KB