ceph: fix potential use-after-free bug when trimming caps
authorXiubo Li <xiubli@redhat.com>
Wed, 19 Apr 2023 02:39:14 +0000 (10:39 +0800)
committerIlya Dryomov <idryomov@gmail.com>
Sun, 30 Apr 2023 10:37:28 +0000 (12:37 +0200)
commitaaf67de78807c59c35bafb5003d4fb457c764800
treeca4240b921c125f5ec462f01284da73f6b182ca4
parent7d41870d65db028234333c68e60a034ac335557a
ceph: fix potential use-after-free bug when trimming caps

When trimming the caps and just after the 'session->s_cap_lock' is
released in ceph_iterate_session_caps() the cap maybe removed by
another thread, and when using the stale cap memory in the callbacks
it will trigger use-after-free crash.

We need to check the existence of the cap just after the 'ci->i_ceph_lock'
being acquired. And do nothing if it's already removed.

Cc: stable@vger.kernel.org
Link: https://tracker.ceph.com/issues/43272
Signed-off-by: Xiubo Li <xiubli@redhat.com>
Reviewed-by: Luís Henriques <lhenriques@suse.de>
Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
fs/ceph/caps.c
fs/ceph/debugfs.c
fs/ceph/mds_client.c
fs/ceph/mds_client.h
fs/ceph/super.h