From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 DEA691A7702; Fri, 29 Mar 2024 12:48:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1711716483; cv=none; b=M4IswQGXdi7oHcSPlllJ7Z/IyhwpmewRwno/UrqxcKFYlk6OyWOqwIw9qVctPuubJ/d8FoZ1CphP7LFFo7hJmALWEBc6+s7HjP8HtAD5JTrTVoYSgk++2CNtT3HLRbu6uQSW1imwQdpmEBMSRi6NY7aEt8LtXXsBVP+cmHC/Tlw= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1711716483; c=relaxed/simple; bh=h/r/xAuLF3DKhe4P3WHvc7dcZDo8RWm6hNQX3r2L9go=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Yq1Yv/vtmPM07dO3PRfOenCnnp9vRjZAh0iZNvK+Mw4Ybmn6yv8GEVDvyI6b9IcTZk2LZ0ZWFR4PKYOaGBxSR8dfsE92zPnygKRZ7S9avOTyStE9E5OzYSgo2rHyLtj/LrlvRe7NSAl+hwPRrcwCEih1TGqDNZaHRP5KAF/4rdw= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=HkflOth0; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="HkflOth0" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 17DE2C433F1; Fri, 29 Mar 2024 12:48:02 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1711716482; bh=h/r/xAuLF3DKhe4P3WHvc7dcZDo8RWm6hNQX3r2L9go=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=HkflOth0ncaMqYIZoxl66pdEJhtehpLCN672h6Q7CI8U7RECJMyUtyS9NQR8+EEo6 z8avDAdeWZAM/KBYeMx6eggAqgwn2Pt6sTnRCWyD06y+Vgr22Ko7cgEeuGJV8ep1Bf D+voGCEoyjul32WYouYJ+P80Hua3Tg3xwZfSBfubTgzC60v1RmT0pOJtoxl+QiIDR7 baHeTrFI1G8AXn/AbJ3iVMSrrRg6h4bAx+SxiBcEA90/66jVx8qsPge2aIKz+hoilm y6jvE86lhQtTDvbZQ9VJgyHGfdngnAVzu/wti3WnK4XM5bM+Zir02h0cjIUQ8Z+6OV IDQBgl5S0R5dw== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Alex Henrie , Jan Kara , Sasha Levin , linux-fsdevel@vger.kernel.org Subject: [PATCH AUTOSEL 5.15 08/34] isofs: handle CDs with bad root inode but good Joliet root directory Date: Fri, 29 Mar 2024 08:47:09 -0400 Message-ID: <20240329124750.3092394-8-sashal@kernel.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240329124750.3092394-1-sashal@kernel.org> References: <20240329124750.3092394-1-sashal@kernel.org> Precedence: bulk X-Mailing-List: linux-fsdevel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-stable: review X-Patchwork-Hint: Ignore X-stable-base: Linux 5.15.153 Content-Transfer-Encoding: 8bit From: Alex Henrie [ Upstream commit 4243bf80c79211a8ca2795401add9c4a3b1d37ca ] I have a CD copy of the original Tom Clancy's Ghost Recon game from 2001. The disc mounts without error on Windows, but on Linux mounting fails with the message "isofs_fill_super: get root inode failed". The error originates in isofs_read_inode, which returns -EIO because de_len is 0. The superblock on this disc appears to be intentionally corrupt as a form of copy protection. When the root inode is unusable, instead of giving up immediately, try to continue with the Joliet file table. This fixes the Ghost Recon CD and probably other copy-protected CDs too. Signed-off-by: Alex Henrie Signed-off-by: Jan Kara Message-Id: <20240208022134.451490-1-alexhenrie24@gmail.com> Signed-off-by: Sasha Levin --- fs/isofs/inode.c | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/fs/isofs/inode.c b/fs/isofs/inode.c index 0c6eacfcbeef1..07252d2a7f5f2 100644 --- a/fs/isofs/inode.c +++ b/fs/isofs/inode.c @@ -908,8 +908,22 @@ static int isofs_fill_super(struct super_block *s, void *data, int silent) * we then decide whether to use the Joliet descriptor. */ inode = isofs_iget(s, sbi->s_firstdatazone, 0); - if (IS_ERR(inode)) - goto out_no_root; + + /* + * Fix for broken CDs with a corrupt root inode but a correct Joliet + * root directory. + */ + if (IS_ERR(inode)) { + if (joliet_level && sbi->s_firstdatazone != first_data_zone) { + printk(KERN_NOTICE + "ISOFS: root inode is unusable. " + "Disabling Rock Ridge and switching to Joliet."); + sbi->s_rock = 0; + inode = NULL; + } else { + goto out_no_root; + } + } /* * Fix for broken CDs with Rock Ridge and empty ISO root directory but -- 2.43.0