mirror of
https://github.com/torvalds/linux.git
synced 2026-11-07 06:17:02 +01:00
ceph: Fix xattr buffer leak in __send_cap()
__prep_cap() takes a reference on the xattr blob via ceph_buffer_get()
and also grabs a reference to the old xattr blob returned by
__ceph_build_xattrs_blob(). These references are normally dropped in
__send_cap() after the cap message has been sent, but when ceph_msg_new()
fails, __send_cap() requeues the cap and returns early without dropping
them, leaking both buffers on every allocation failure.
Release arg->old_xattr_buf and arg->xattr_buf on the ceph_msg_new()
failure path before returning.
Cc: stable@vger.kernel.org
Fixes: 16d68903f5 ("ceph: break up send_cap_msg")
Signed-off-by: Wentao Liang <vulab@iscas.ac.cn>
Reviewed-by: Alex Markuze <amarkuze@redhat.com>
Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
This commit is contained in:
parent
b3bf89767e
commit
e51cf76e72
|
|
@ -1630,6 +1630,8 @@ static void __send_cap(struct cap_msg_args *arg, struct ceph_inode_info *ci)
|
|||
spin_lock(&ci->i_ceph_lock);
|
||||
__cap_delay_requeue(arg->session->s_mdsc, ci);
|
||||
spin_unlock(&ci->i_ceph_lock);
|
||||
ceph_buffer_put(arg->old_xattr_buf);
|
||||
ceph_buffer_put(arg->xattr_buf);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user