From: "Luís Henriques" <lhenriques@suse.de>
To: Xiubo Li <xiubli@redhat.com>
Cc: Jeff Layton <jlayton@kernel.org>,
Ilya Dryomov <idryomov@gmail.com>,
ceph-devel@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH 2/3] ceph: fix use-after-free in ceph_readdir
Date: Sat, 05 Mar 2022 14:32:22 +0000 [thread overview]
Message-ID: <87h78co4g9.fsf@brahms.olymp> (raw)
In-Reply-To: <79cd6979-cb02-c0a3-a4e9-d66f65d78976@redhat.com> (Xiubo Li's message of "Sat, 5 Mar 2022 20:43:04 +0800")
Xiubo Li <xiubli@redhat.com> writes:
> On 3/5/22 2:20 AM, Jeff Layton wrote:
>> On Fri, 2022-03-04 at 16:14 +0000, Luís Henriques wrote:
>>> After calling ceph_mdsc_put_request() on dfi->last_readdir, this field
>>> should be set to NULL, otherwise we may end-up freeing it twince and get
>>> the following splat:
>>>
>>> refcount_t: underflow; use-after-free.
>>> WARNING: CPU: 0 PID: 229 at lib/refcount.c:28 refcount_warn_saturate+0xa6/0xf0
>>> ...
>>> Call Trace:
>>> <TASK>
>>> ceph_readdir+0xd35/0x1460 [ceph]
>>> ? _raw_spin_unlock+0x12/0x30
>>> ? preempt_count_add+0x73/0xa0
>>> ? _raw_spin_unlock+0x12/0x30
>>> ? __mark_inode_dirty+0x27c/0x3a0
>>> iterate_dir+0x7d/0x190
>>> __x64_sys_getdents64+0x80/0x120
>>> ? compat_fillonedir+0x160/0x160
>>> do_syscall_64+0x43/0x90
>>> entry_SYSCALL_64_after_hwframe+0x44/0xae
>>>
>>> Signed-off-by: Luís Henriques <lhenriques@suse.de>
>>> ---
>>> fs/ceph/dir.c | 1 +
>>> 1 file changed, 1 insertion(+)
>>>
>>> diff --git a/fs/ceph/dir.c b/fs/ceph/dir.c
>>> index 0bcb677d2199..934402f5e9e6 100644
>>> --- a/fs/ceph/dir.c
>>> +++ b/fs/ceph/dir.c
>>> @@ -555,6 +555,7 @@ static int ceph_readdir(struct file *file, struct dir_context *ctx)
>>> le32_to_cpu(rde->inode.in->mode) >> 12)) {
>>> dout("filldir stopping us...\n");
>>> ceph_mdsc_put_request(dfi->last_readdir);
>>> + dfi->last_readdir = NULL;
>>> err = 0;
>>> goto out;
>>> }
>> I think Xiubo fixed this in the testing branch late yesterday. It should
>> no longer be needed.
>
> Right and I have sent a new version of my previous patch to remove the buggy
> code.
Ok, cool. This definitely proofs that my local branch wasn't updated :-)
(I really need to get rid of this mails/patches backlog.)
Cheers,
--
Luís
next prev parent reply other threads:[~2022-03-05 14:32 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-03-04 16:14 [PATCH 0/3] ceph: minor fixes and encrypted snapshot names Luís Henriques
2022-03-04 16:14 ` [PATCH 1/3] ceph: fix error path in ceph_readdir() Luís Henriques
2022-03-04 18:17 ` Jeff Layton
2022-03-05 14:30 ` Luís Henriques
2022-03-04 16:14 ` [PATCH 2/3] ceph: fix use-after-free in ceph_readdir Luís Henriques
2022-03-04 18:20 ` Jeff Layton
2022-03-05 12:43 ` Xiubo Li
2022-03-05 14:32 ` Luís Henriques [this message]
2022-03-04 16:14 ` [PATCH 3/3] ceph: add support for encrypted snapshot names Luís Henriques
2022-03-04 18:25 ` Jeff Layton
2022-03-05 14:34 ` Luís Henriques
2022-03-05 12:43 ` Xiubo Li
2022-03-04 16:26 ` [PATCH 0/3] ceph: minor fixes and " Luís Henriques
2022-03-04 18:30 ` Jeff Layton
2022-03-05 14:56 ` Luís Henriques
2022-03-07 0:49 ` Xiubo Li
2022-03-07 14:20 ` Luís Henriques
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87h78co4g9.fsf@brahms.olymp \
--to=lhenriques@suse.de \
--cc=ceph-devel@vger.kernel.org \
--cc=idryomov@gmail.com \
--cc=jlayton@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=xiubli@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.