From: Baokun Li <libaokun1@xxxxxxxxxx> Hi all! This is the third version of this patch series. The new version has no functional changes compared to the previous one, so I've kept the previous Acked-by and Reviewed-by, so please let me know if you have any objections. Thank you, Jia Zhu and Jingbo Xu, Jeff Layton, Gao Xiang, for the feedback in the previous version. We've been testing ondemand mode for cachefiles since January, and we're almost done. We hit a lot of issues during the testing period, and this patch set fixes some of the issues related to ondemand requests. The patches have passed internal testing without regression. The following is a brief overview of the patches, see the patches for more details. Patch 1-5: Holding reference counts of reqs and objects on read requests to avoid malicious restore leading to use-after-free. Patch 6-10: Add some consistency checks to copen/cread/get_fd to avoid malicious copen/cread/close fd injections causing use-after-free or hung. Patch 11: When cache is marked as CACHEFILES_DEAD, flush all requests, otherwise the kernel may be hung. since this state is irreversible, the daemon can read open requests but cannot copen. Patch 12: Allow interrupting a read request being processed by killing the read process as a way of avoiding hung in some special cases. Comments and questions are, as always, welcome. Please let me know what you think. Thanks, Baokun Changes since v2: * Collect Acked-by from Jeff Layton.(Thanks for your ack!) * Collect RVB from Gao Xiang and Jingbo Xu.(Thanks for your review!) * Pathch 9: Rename anon_file to ondemand_anon_file to avoid possible conflicts with generic code. * Pathch 12: Add cachefiles_ondemand_finish_req() helper function to simplify the code. * Adjust the patch order as suggested to facilitate backporting to the STABLE version. * The current patch 1 is the previous patch 5; * The current patch 5 is the previous patch 2; Changes since v1: * Collect RVB from Jia Zhu and Jingbo Xu.(Thanks for your review!) * Pathch 1: Add Fixes tag and enrich the commit message. * Pathch 7: Add function graph comments. * Pathch 8: Update commit message and comments. * Pathch 9: Enriched commit msg. [V1]: https://lore.kernel.org/all/20240424033916.2748488-1-libaokun@xxxxxxxxxxxxxxx [V2]: https://lore.kernel.org/all/20240515084601.3240503-1-libaokun@xxxxxxxxxxxxxxx Baokun Li (11): cachefiles: add output string to cachefiles_obj_[get|put]_ondemand_fd cachefiles: remove requests from xarray during flushing requests cachefiles: fix slab-use-after-free in cachefiles_ondemand_get_fd() cachefiles: fix slab-use-after-free in cachefiles_ondemand_daemon_read() cachefiles: remove err_put_fd label in cachefiles_ondemand_daemon_read() cachefiles: add consistency check for copen/cread cachefiles: add spin_lock for cachefiles_ondemand_info cachefiles: never get a new anonymous fd if ondemand_id is valid cachefiles: defer exposing anon_fd until after copy_to_user() succeeds cachefiles: flush all requests after setting CACHEFILES_DEAD cachefiles: make on-demand read killable Zizhi Wo (1): cachefiles: Set object to close if ondemand_id < 0 in copen fs/cachefiles/daemon.c | 3 +- fs/cachefiles/internal.h | 5 + fs/cachefiles/ondemand.c | 217 ++++++++++++++++++++++-------- include/trace/events/cachefiles.h | 8 +- 4 files changed, 176 insertions(+), 57 deletions(-) -- 2.39.2