[ovs-dev] [PATCH v2] ofproto-dpif-upcall: Fix race condition while purging

Ilya Maximets i.maximets at ovn.org
Thu May 27 10:43:26 UTC 2021


On 5/27/21 12:29 PM, Jianbo Liu wrote:
> There is a race condidtion between purger and handler in dpif-netlink.
> Handler may create new ukey and install it while executing 'ovs-appctl
> revalidator/purge' command. However, before handler calls
> transition_ukey() in handle_upcalls(), purger may get this ukey from
> umap, then evict and delete it. This will trigger ovs_abort in
> transition_ukey() for handler because it is trying to set state to
> EVICTED or OPERATIONAL, but ukey is already in DELETED state.
> To fix this issue, purger must not delete ukey in VISIBLE state.

Hi.  This is not a good thing to trigger abort(), but "purge" means
"purge".  And, AFAIU, most of ukeys are visible.  This is a purely
debug interface that was introduced to test functionality of OVS and
should not be used in production environment.  The fact that "purge"
doesn't remove visible ukeys, in my opinion, just makes the appctl
"revalidator/purge" useless.  Can we replace abort() with rate-limited
error message for this scenario instead to avoid process termination?

BTW, how did you catch this?  Is it reproducible with system tests?

Best regards, Ilya Maximets.


More information about the dev mailing list