summaryrefslogtreecommitdiffstats
path: root/fs/udf
diff options
context:
space:
mode:
authorJan Kara <jack@suse.cz>2020-01-17 12:11:14 +0100
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2020-02-11 04:33:51 -0800
commit97bc3b7d7a9c6443f6ec25fda06068a2ae2ffb93 (patch)
treef518c3acaf6b92e037fba36dd99609cf51fcdbeb /fs/udf
parent218ab8f8862e44b87c2a7506b9dce278d65e3983 (diff)
downloadlinux-stable-97bc3b7d7a9c6443f6ec25fda06068a2ae2ffb93.tar.gz
linux-stable-97bc3b7d7a9c6443f6ec25fda06068a2ae2ffb93.tar.bz2
linux-stable-97bc3b7d7a9c6443f6ec25fda06068a2ae2ffb93.zip
udf: Allow writing to 'Rewritable' partitions
[ Upstream commit 15fb05fd286ac57a0802d71624daeb5c1c2d5b07 ] UDF 2.60 standard states in section 2.2.14.2: A partition with Access Type 3 (rewritable) shall define a Freed Space Bitmap or a Freed Space Table, see 2.3.3. All other partitions shall not define a Freed Space Bitmap or a Freed Space Table. Rewritable partitions are used on media that require some form of preprocessing before re-writing data (for example legacy MO). Such partitions shall use Access Type 3. Overwritable partitions are used on media that do not require preprocessing before overwriting data (for example: CD-RW, DVD-RW, DVD+RW, DVD-RAM, BD-RE, HD DVD-Rewritable). Such partitions shall use Access Type 4. however older versions of the standard didn't have this wording and there are tools out there that create UDF filesystems with rewritable partitions but that don't contain a Freed Space Bitmap or a Freed Space Table on media that does not require pre-processing before overwriting a block. So instead of forcing media with rewritable partition read-only, base this decision on presence of a Freed Space Bitmap or a Freed Space Table. Reported-by: Pali Rohár <pali.rohar@gmail.com> Reviewed-by: Pali Rohár <pali.rohar@gmail.com> Fixes: b085fbe2ef7f ("udf: Fix crash during mount") Link: https://lore.kernel.org/linux-fsdevel/20200112144735.hj2emsoy4uwsouxz@pali Signed-off-by: Jan Kara <jack@suse.cz> Signed-off-by: Sasha Levin <sashal@kernel.org>
Diffstat (limited to 'fs/udf')
-rw-r--r--fs/udf/super.c1
1 files changed, 0 insertions, 1 deletions
diff --git a/fs/udf/super.c b/fs/udf/super.c
index 7af011dc9ae8..6fd0f14e9dd2 100644
--- a/fs/udf/super.c
+++ b/fs/udf/super.c
@@ -999,7 +999,6 @@ static int check_partition_desc(struct super_block *sb,
switch (le32_to_cpu(p->accessType)) {
case PD_ACCESS_TYPE_READ_ONLY:
case PD_ACCESS_TYPE_WRITE_ONCE:
- case PD_ACCESS_TYPE_REWRITABLE:
case PD_ACCESS_TYPE_NONE:
goto force_ro;
}