From: Pali Rohár Date: Sun, 8 Nov 2020 13:24:06 +0000 (+0100) Subject: libblkid: udf: add support for unclosed sequential Write-Once media X-Git-Tag: v2.37-rc1~266^2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=8e3c0176bd4f3de626dfc8cd6946378b634f21d4;p=thirdparty%2Futil-linux.git libblkid: udf: add support for unclosed sequential Write-Once media --- diff --git a/libblkid/src/superblocks/udf.c b/libblkid/src/superblocks/udf.c index 97ecdcbe4f..1d7820ff19 100644 --- a/libblkid/src/superblocks/udf.c +++ b/libblkid/src/superblocks/udf.c @@ -276,12 +276,24 @@ anchor: return errno ? -errno : 1; /* Check that we read correct sector and detected correct block size */ - if (le32_to_cpu(vd->tag.location) != s_off / pbs[i] + 256) - continue; + if (le32_to_cpu(vd->tag.location) == s_off / pbs[i] + 256) { + type = le16_to_cpu(vd->tag.id); + if (type == TAG_ID_AVDP) + goto real_blksz; + } - type = le16_to_cpu(vd->tag.id); - if (type == TAG_ID_AVDP) - goto real_blksz; + /* UDF-2.60: 2.2.3: Unclosed sequential Write-Once media may + * have a single AVDP present at either sector 256 or 512. */ + vd = (struct volume_descriptor *) + blkid_probe_get_buffer(pr, s_off + 512 * pbs[i], sizeof(*vd)); + if (!vd) + return errno ? -errno : 1; + + if (le32_to_cpu(vd->tag.location) == s_off / pbs[i] + 512) { + type = le16_to_cpu(vd->tag.id); + if (type == TAG_ID_AVDP) + goto real_blksz; + } } return 1;