diff --git a/fs/cachefiles/ondemand.c b/fs/cachefiles/ondemand.c index be1d327a221942c7e69a35662983517d33625da0..6166b66729e49bce67105641faf0c19a66845622 100644 --- a/fs/cachefiles/ondemand.c +++ b/fs/cachefiles/ondemand.c @@ -589,6 +589,9 @@ void cachefiles_ondemand_clean_object(struct cachefiles_object *object) } } xa_unlock(&cache->reqs); + + /* Wait for ondemand_object_worker() to finish to avoid UAF. */ + cancel_work_sync(&object->ondemand->ondemand_work); } int cachefiles_ondemand_init_obj_info(struct cachefiles_object *object,