OSDN Git Service

udf: disallow RW mount without valid integrity descriptor
authorSteve Magnani <steve.magnani@digidescorp.com>
Mon, 11 Feb 2019 14:24:38 +0000 (08:24 -0600)
committerJan Kara <jack@suse.cz>
Mon, 11 Feb 2019 17:31:35 +0000 (18:31 +0100)
Refuse to mount a volume read-write without a coherent Logical Volume
Integrity Descriptor, because we can't generate truly unique IDs without
one.

This fixes a bug where all inodes created on a UDF filesystem following
mount without a coherent LVID are assigned unique ID 0 which can then
confuse other UDF implementations.

Signed-off-by: Steven J. Magnani <steve@digidescorp.com>
Signed-off-by: Jan Kara <jack@suse.cz>
fs/udf/super.c

index 2cf435c..a6940d9 100644 (file)
@@ -1474,6 +1474,17 @@ static int udf_load_logicalvol(struct super_block *sb, sector_t block,
        if (lvd->integritySeqExt.extLength)
                udf_load_logicalvolint(sb, leea_to_cpu(lvd->integritySeqExt));
        ret = 0;
+
+       if (!sbi->s_lvid_bh) {
+               /* We can't generate unique IDs without a valid LVID */
+               if (sb_rdonly(sb)) {
+                       UDF_SET_FLAG(sb, UDF_FLAG_RW_INCOMPAT);
+               } else {
+                       udf_warn(sb, "Damaged or missing LVID, forcing "
+                                    "readonly mount\n");
+                       ret = -EACCES;
+               }
+       }
 out_bh:
        brelse(bh);
        return ret;