summaryrefslogtreecommitdiffstats
path: root/sys/geom
diff options
context:
space:
mode:
authorpjd <pjd@FreeBSD.org>2005-08-26 12:50:08 +0000
committerpjd <pjd@FreeBSD.org>2005-08-26 12:50:08 +0000
commiteac0371f3b7a1e56ee5432b37a9fb10aa105533e (patch)
tree8c3f2d63e544272abedd1f4a62ca8602aa84e099 /sys/geom
parenta8d3f7656a47296124be2844bcf73f6b43a08ccb (diff)
downloadFreeBSD-src-eac0371f3b7a1e56ee5432b37a9fb10aa105533e.zip
FreeBSD-src-eac0371f3b7a1e56ee5432b37a9fb10aa105533e.tar.gz
Verify offset before reading.
MFC after: 2 days
Diffstat (limited to 'sys/geom')
-rw-r--r--sys/geom/label/g_label_iso9660.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/sys/geom/label/g_label_iso9660.c b/sys/geom/label/g_label_iso9660.c
index 34d9252..0a2fa8e 100644
--- a/sys/geom/label/g_label_iso9660.c
+++ b/sys/geom/label/g_label_iso9660.c
@@ -38,6 +38,7 @@ __FBSDID("$FreeBSD$");
#define G_LABEL_ISO9660_DIR "iso9660"
#define ISO9660_MAGIC "\x01" "CD001" "\x01\x00"
+#define ISO9660_OFFSET 0x8000
#define VOLUME_LEN 32
@@ -52,7 +53,10 @@ g_label_iso9660_taste(struct g_consumer *cp, char *label, size_t size)
pp = cp->provider;
label[0] = '\0';
- sector = (char *)g_read_data(cp, 0x8000, pp->sectorsize, &error);
+ if ((ISO9660_OFFSET % pp->sectorsize) != 0)
+ return;
+ sector = (char *)g_read_data(cp, ISO9660_OFFSET, pp->sectorsize,
+ &error);
if (sector == NULL || error != 0)
return;
if (bcmp(sector, ISO9660_MAGIC, sizeof(ISO9660_MAGIC) - 1) != 0) {
OpenPOWER on IntegriCloud