From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3F0164F85D8; Wed, 30 Sep 2026 16:23:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790785423; cv=none; b=pr3q36y3N6+uURvNLK080KI1quXOYeFYlhJ6Mfy/MqwGIuwL8KtORYEImYDa3SV1+IDWLSthmdSNr/162gTw5BAvXMA67dHg2RkihCMGCXWiZSPQEiQfMTuEuk/iQv29/JQsTsT5jMMhLHWZvwFPVp/+hI9TfAiw660RxeQipXI= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790785423; c=relaxed/simple; bh=VKHa60jVn19ZQ30gfNUilMI5m7iSy3T5IEcwR9xW+Uk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=fDXi9SomTJV7HhUy1IOMfPIX5wFuzexu/IGPX9bWMtF3kx5wYx3sHMMAwdAA3JeWIQz1b3QX2mJXqEld04zPeCVQBsUeHX06WOmA80H8VTo6xjXLf1CHm8kPnC6rUgaDt4RKKDTvI0A5QCPiQ89+aJ0qtG/7Cy17KuRalcIX2I0= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linuxfoundation.org header.i=@linuxfoundation.org header.b=s6L5wPTl; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linuxfoundation.org header.i=@linuxfoundation.org header.b="s6L5wPTl" Received: by smtp.kernel.org (Postfix) with ESMTPSA id E8A591F00893; Wed, 30 Sep 2026 16:23:37 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linuxfoundation.org; s=korg; t=1790785418; bh=bBHCZqzWF17OEvmybDBORdEPHksPQQAhDpngrYtcjmM=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=s6L5wPTlATuFk4wYLz4zKJgXzgIh6vfmYMflOdIJnNd6MPpRvRpqwmSKr9haGvwJk ynMd0KKRqDlrCGp8uq6v2Dt+R1aVkRjyg+0+++x8fw1D8cTfitlA8Lba1LuFKqg4bV 2gVIGnnwmCjNFprBrlRYQqqyzABi2unGeb75y8z8= From: Greg Kroah-Hartman To: stable@vger.kernel.org Cc: Greg Kroah-Hartman , patches@lists.linux.dev, Ali Ahmet Memis , Jan Kara , "Christian Brauner (Amutable)" Subject: [PATCH 6.1 503/982] ufs: create the root dentry after loading cylinder metadata Date: Wed, 30 Sep 2026 17:20:39 +0200 Message-ID: <20260930152427.584343898@linuxfoundation.org> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260930152416.775402466@linuxfoundation.org> References: <20260930152416.775402466@linuxfoundation.org> User-Agent: quilt/0.69 X-stable: review X-Patchwork-Hint: ignore Precedence: bulk X-Mailing-List: patches@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit 6.1-stable review patch. If anyone has any objections, please let me know. ------------------ From: Ali Ahmet Memis commit 55a4c98abb9694b067c6a031d11501f06b6b523c upstream. ufs_fill_super() installed sb->s_root before it loaded the cylinder group structures for a writable mount: sb->s_root = d_make_root(inode); ... if (!sb_rdonly(sb)) if (!ufs_read_cylinder_structures(sb)) goto failed; When ufs_read_cylinder_structures() failed, the error path freed the in-core superblock information and set sb->s_fs_info to NULL while sb->s_root stayed installed. get_tree_bdev() then reached deactivate_locked_super(), and because s_root was present, generic_shutdown_super() called sync_filesystem() and the put_super operation. Both dereference UFS_SB(sb), which is now NULL, so a mount that fails only while reading the cylinder groups oopses during teardown. A crafted image whose first cylinder group cannot be read reaches this path. Load the cylinder group metadata first and create the root dentry last, so the superblock is published to the VFS only once it is fully set up. ufs_setup_cstotal() and ufs_read_cylinder_structures() take only the super_block and do not use the root inode, so the reordering is safe. Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2") Cc: stable@vger.kernel.org Signed-off-by: Ali Ahmet Memis Link: https://patch.msgid.link/20260801071306.59484-2-ali@iusegentoo.com Reviewed-by: Jan Kara Signed-off-by: Christian Brauner (Amutable) Signed-off-by: Greg Kroah-Hartman --- fs/ufs/super.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) --- a/fs/ufs/super.c +++ b/fs/ufs/super.c @@ -1268,6 +1268,15 @@ magic_found: sb->s_maxbytes = ufs_max_bytes(sb); sb->s_max_links = UFS_LINK_MAX; + ufs_setup_cstotal(sb); + /* + * Read cylinder group structures + */ + if (!sb_rdonly(sb)) + if (!ufs_read_cylinder_structures(sb)) + goto failed; + + /* create the root dentry last, once UFS_SB(sb) is fully set up */ inode = ufs_iget(sb, UFS_ROOTINO); if (IS_ERR(inode)) { ret = PTR_ERR(inode); @@ -1279,14 +1288,6 @@ magic_found: goto failed; } - ufs_setup_cstotal(sb); - /* - * Read cylinder group structures - */ - if (!sb_rdonly(sb)) - if (!ufs_read_cylinder_structures(sb)) - goto failed; - UFSD("EXIT\n"); return 0;