Skip to content

Commit

Permalink
ceph: fix use after free on mds __unregister_request
Browse files Browse the repository at this point in the history
There was a use after free in __unregister_request that would trigger
whenever the request map held the last reference.  This appears to have
triggered an oops during 'umount -f' when requests are being torn down.

Signed-off-by: Sage Weil <[email protected]>
  • Loading branch information
liewegas committed Mar 29, 2010
1 parent 23ab15a commit 94aa8ae
Showing 1 changed file with 2 additions and 1 deletion.
3 changes: 2 additions & 1 deletion fs/ceph/mds_client.c
Original file line number Diff line number Diff line change
Expand Up @@ -532,7 +532,6 @@ static void __unregister_request(struct ceph_mds_client *mdsc,
dout("__unregister_request %p tid %lld\n", req, req->r_tid);
rb_erase(&req->r_node, &mdsc->request_tree);
RB_CLEAR_NODE(&req->r_node);
ceph_mdsc_put_request(req);

if (req->r_unsafe_dir) {
struct ceph_inode_info *ci = ceph_inode(req->r_unsafe_dir);
Expand All @@ -541,6 +540,8 @@ static void __unregister_request(struct ceph_mds_client *mdsc,
list_del_init(&req->r_unsafe_dir_item);
spin_unlock(&ci->i_unsafe_lock);
}

ceph_mdsc_put_request(req);
}

/*
Expand Down

0 comments on commit 94aa8ae

Please sign in to comment.