From patchwork Mon Jan 22 22:32:19 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Howells X-Patchwork-Id: 13526329 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 2F364C46CD2 for ; Mon, 22 Jan 2024 22:33:01 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 4C6E18D0007; Mon, 22 Jan 2024 17:32:57 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 4760A8D0003; Mon, 22 Jan 2024 17:32:57 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 2A0018D0007; Mon, 22 Jan 2024 17:32:57 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id 0ECAD8D0003 for ; Mon, 22 Jan 2024 17:32:57 -0500 (EST) Received: from smtpin06.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id E19D11401AB for ; Mon, 22 Jan 2024 22:32:56 +0000 (UTC) X-FDA: 81708398352.06.E72F433 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by imf17.hostedemail.com (Postfix) with ESMTP id 3F63040012 for ; Mon, 22 Jan 2024 22:32:55 +0000 (UTC) Authentication-Results: imf17.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=i3V3n7Zf; dmarc=pass (policy=none) header.from=redhat.com; spf=pass (imf17.hostedemail.com: domain of dhowells@redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=dhowells@redhat.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1705962775; a=rsa-sha256; cv=none; b=w2jKFEqVLnsdFxjzOIDBxRY8EXHmYvNOMu0IllPa5Brvb1nxDTNltBuhRR6Y4kUCeEuNSA iV2r6C2r6Sm+HWHBnhFbQtTf7QwXCW691YrLxnJtyzfIx9zza5dLR+5roU1sVpAGAm6ALZ KSDeLGNwhGJ1eg2crrBMWZ5Zh+QtMQY= ARC-Authentication-Results: i=1; imf17.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=i3V3n7Zf; dmarc=pass (policy=none) header.from=redhat.com; spf=pass (imf17.hostedemail.com: domain of dhowells@redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=dhowells@redhat.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1705962775; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=XRe99Wj+tzBNI3ZsVZlJ7dd6pgKPiqDyuDCv0Ih9868=; b=iLQNmS9j9e1B8BfIVB8rXEmKmb2/LVmrJdI4i4LoI0hNHhF1qgUHX/DF3GSEyVyb1lccVz zje9xkEkWRc3amTf4bpmd6IEfbnc5VR4W6b4ItU68QVtffhfzg8ShDjZPBFRAi4FPlVA2F ykoyqkLH/fuCMkWrnK2a8DsupL24czU= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1705962774; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=XRe99Wj+tzBNI3ZsVZlJ7dd6pgKPiqDyuDCv0Ih9868=; b=i3V3n7ZfNUP/O5y0/JW1suyEDlP+ow8+taS/jPzqkg17K0eBjK/7MEKbJrGOJEh/WzC7wo Q2L+bt/EElV3CxD6VUyxLxsXP7T0cnPxUdCnQxosRvCVro2FexiSM/QFRUklUZ9DRRYsYS xk20l7BRoKXkzZPfM2SPRmEep9/Wb10= Received: from mimecast-mx02.redhat.com (mx-ext.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-131-XfsFasc1N_mUuQUWqPtJ_w-1; Mon, 22 Jan 2024 17:32:52 -0500 X-MC-Unique: XfsFasc1N_mUuQUWqPtJ_w-1 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.rdu2.redhat.com [10.11.54.8]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 3C97C1C04184; Mon, 22 Jan 2024 22:32:51 +0000 (UTC) Received: from warthog.procyon.org.com (unknown [10.42.28.67]) by smtp.corp.redhat.com (Postfix) with ESMTP id 66B69C0FDCA; Mon, 22 Jan 2024 22:32:48 +0000 (UTC) From: David Howells To: Christian Brauner Cc: David Howells , Jeff Layton , Matthew Wilcox , netfs@lists.linux.dev, linux-afs@lists.infradead.org, linux-cifs@vger.kernel.org, linux-nfs@vger.kernel.org, ceph-devel@vger.kernel.org, v9fs@lists.linux.dev, linux-erofs@lists.ozlabs.org, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org, Marc Dionne , Gao Xiang , Chao Yu , Yue Hu , Jeffle Xu Subject: [PATCH v2 06/10] cachefiles, erofs: Fix NULL deref in when cachefiles is not doing ondemand-mode Date: Mon, 22 Jan 2024 22:32:19 +0000 Message-ID: <20240122223230.4000595-7-dhowells@redhat.com> In-Reply-To: <20240122223230.4000595-1-dhowells@redhat.com> References: <20240122223230.4000595-1-dhowells@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.11.54.8 X-Rspam-User: X-Rspamd-Server: rspam06 X-Rspamd-Queue-Id: 3F63040012 X-Stat-Signature: g157g16wbawcs1qwa4jpc8to8wasbknp X-HE-Tag: 1705962775-387218 X-HE-Meta: U2FsdGVkX19xlmKMYIBFJ66TlBcUBRPRzP6X4mt2Trhb0Rb0cV/1gBj16kUvcbqo1KSXRqKO0PcnBsOqK4I+MqkVvkADDAjiq4Up3ZhFO+ZPcn+Hpxis4vWGUvRf2km+p0cnEeswEKp9dUbQPbQ5Din42eSGK98lqy+clpIC0zT/c94B2ne0opxn+b+legKYYl/tPm9w7lDpZ9Yzis6VXC1Cudb97JnUio1mKMAD0pE/E1G2pQWY0sD5zvBM0jQl3UD5zlGN+5GeHpSWV9uVx7UajleuuTO1BlhV5O3sK+QJcxxjr9uBilWiXGCH2xbhs6s/QMdVA7cNL3TW9VsltbOl4HU3LS+E/r80Ot2n/IolKtp2s6Ydb5FyS48xd1izKOzgQXTjKKfQaQaNTBmuPCg9OcP/gyaSEVzecq49DeACapVoig8i9IZzLmD9emAYD94Edjg+yGpbk+jY4ftdK8eTGACYhC6J9vs++oqM4Au4PDpUzUqffC4sAK1/Y01sMPMlGpWDYJLYtxLnpWM13UXEBbHJxW5jT7m8vcBTcII8W4nDEFAf0TBjfkVLFPVQK6Ez0yW7vZhwm3o7+ffjAglF7yBfF640SkHn6lF+OnTCVadsL+vvV/C1e5P4WFwnVoRe9veze4KYfpQavDaFhldJUUOBWx4tmbBxB9EeYKMjB5ggQuYIDkioMY4Z+fms6z3VqS6MJhQHQIwPvSLOh/nLaXyCYtFMMQCqwQQ0wTA6L5ad9GlCMi5gg9etSJICZEXm2hSTU+GbSv7ChwbdI/9Gj+wOOYrwSQlI5HZ4rQTI5/zYT7t5tpQ/o+STiEqJG6mjf+mAPKKEXU+iaOKbD3r/fPNccHjT1YWY978SpvV+q0pRs85l2oCMY8IRJleu5/jOxnyZv+zWv9qn6dVpI4nyrQJxCuKoVwMxkriIgFikdEpeRqfHGVRNzVR61LaUG0TNAbI/21iwHYJqalK lAG69K99 cOqnDtrfXvg2SwMmYGIkhvBHHQvSVMzh+6gQ/PR+Z5SbtstBusYWpKJtSJqXhYCvizlQaRB7cxzDukeuPuibNS4AVDqkZVCR/flDC3hgCelAnGs1WFdbmSEDPOucwTEnSk+nfuYIE6nI2BKqNoj2nIvCUMvoFSBFjUYbNV3ISeEYW1f6fDj2dbLs6c6oGy46cvsOLx1vPAEhtXQyl+T0/up8OEqkqhNVJSqdKKOwTCjOMMEWtddY1RAqXUp8CXKzh9OduKrJbJBwO95OMSYInt/p3mOhqXAtjYItSfmVNAyDka4Z3Ett711U4MEkQZr7KLGYExrdVMWJZgCfGUbIzOU1nfn4ZnrVtx5Kj2yRctlS4Gd+8Co9oAYkTegv3pDnMyQTkIU6MjElvBZia6aTriyh7BSS55Qd/ligLjO/7twm4THm4wzI3RkR0MQ== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: cachefiles_ondemand_init_object() as called from cachefiles_open_file() and cachefiles_create_tmpfile() does not check if object->ondemand is set before dereferencing it, leading to an oops something like: RIP: 0010:cachefiles_ondemand_init_object+0x9/0x41 ... Call Trace: cachefiles_open_file+0xc9/0x187 cachefiles_lookup_cookie+0x122/0x2be fscache_cookie_state_machine+0xbe/0x32b fscache_cookie_worker+0x1f/0x2d process_one_work+0x136/0x208 process_scheduled_works+0x3a/0x41 worker_thread+0x1a2/0x1f6 kthread+0xca/0xd2 ret_from_fork+0x21/0x33 Fix this by making cachefiles_ondemand_init_object() return immediately if cachefiles->ondemand is NULL. Fixes: 3c5ecfe16e76 ("cachefiles: extract ondemand info field from cachefiles_object") Reported-by: Marc Dionne Signed-off-by: David Howells cc: Gao Xiang cc: Chao Yu cc: Yue Hu cc: Jeffle Xu cc: linux-erofs@lists.ozlabs.org cc: netfs@lists.linux.dev cc: linux-fsdevel@vger.kernel.org Reviewed-by: Jingbo Xu --- Notes: Changes ======= ver #2) - Move check of object->ondemand into cachefiles_ondemand_init_object() fs/cachefiles/ondemand.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/fs/cachefiles/ondemand.c b/fs/cachefiles/ondemand.c index 5fd74ec60bef..4ba42f1fa3b4 100644 --- a/fs/cachefiles/ondemand.c +++ b/fs/cachefiles/ondemand.c @@ -539,6 +539,9 @@ int cachefiles_ondemand_init_object(struct cachefiles_object *object) struct fscache_volume *volume = object->volume->vcookie; size_t volume_key_size, cookie_key_size, data_len; + if (!object->ondemand) + return 0; + /* * CacheFiles will firstly check the cache file under the root cache * directory. If the coherency check failed, it will fallback to