summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPawel Jakub Dawidek <pjd@FreeBSD.org>2005-08-30 15:18:54 +0000
committerPawel Jakub Dawidek <pjd@FreeBSD.org>2005-08-30 15:18:54 +0000
commit9d31330c07cb94780b51d8ea8cbd947ab43aeb58 (patch)
tree847d972668234dfde2837b6085105947b3c547a5
parent25aef68e4cfa69c2ba2b18640f8ddb770c89d9d3 (diff)
Notes
-rw-r--r--sys/geom/label/g_label_ext2fs.c3
-rw-r--r--sys/geom/label/g_label_iso9660.c6
-rw-r--r--sys/geom/label/g_label_reiserfs.c16
3 files changed, 18 insertions, 7 deletions
diff --git a/sys/geom/label/g_label_ext2fs.c b/sys/geom/label/g_label_ext2fs.c
index 18252378143e4..379785f54558b 100644
--- a/sys/geom/label/g_label_ext2fs.c
+++ b/sys/geom/label/g_label_ext2fs.c
@@ -58,6 +58,9 @@ g_label_ext2fs_taste(struct g_consumer *cp, char *label, size_t size)
pp = cp->provider;
label[0] = '\0';
+ if ((EXT2FS_SB_OFFSET % pp->sectorsize) != 0)
+ return;
+
fs = (e2sb_t *)g_read_data(cp, EXT2FS_SB_OFFSET, pp->sectorsize, NULL);
if (fs == NULL)
return;
diff --git a/sys/geom/label/g_label_iso9660.c b/sys/geom/label/g_label_iso9660.c
index 34d9252bdfdb9..0a2fa8e36b575 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) {
diff --git a/sys/geom/label/g_label_reiserfs.c b/sys/geom/label/g_label_reiserfs.c
index 8ef1ec89d699f..c2bee7165c45e 100644
--- a/sys/geom/label/g_label_reiserfs.c
+++ b/sys/geom/label/g_label_reiserfs.c
@@ -49,11 +49,17 @@ typedef struct resiserfs_sb {
} reiserfs_sb_t;
static reiserfs_sb_t *
-g_label_reiserfs_read_super(struct g_consumer *cp, off_t offset, off_t len)
+g_label_reiserfs_read_super(struct g_consumer *cp, off_t offset)
{
reiserfs_sb_t *fs;
+ u_int secsize;
- fs = (reiserfs_sb_t *)g_read_data(cp, offset, len, NULL);
+ secsize = cp->provider->sectorsize;
+
+ if ((offset % secsize) != 0)
+ return (NULL);
+
+ fs = (reiserfs_sb_t *)g_read_data(cp, offset, secsize, NULL);
if (fs == NULL)
return (NULL);
@@ -77,12 +83,10 @@ g_label_reiserfs_taste(struct g_consumer *cp, char *label, size_t size)
label[0] = '\0';
/* Try old format */
- fs = g_label_reiserfs_read_super(cp, REISERFS_OLD_DISK_OFFSET,
- pp->sectorsize);
+ fs = g_label_reiserfs_read_super(cp, REISERFS_OLD_DISK_OFFSET);
if (fs == NULL) {
/* Try new format */
- fs = g_label_reiserfs_read_super(cp, REISERFS_NEW_DISK_OFFSET,
- pp->sectorsize);
+ fs = g_label_reiserfs_read_super(cp, REISERFS_NEW_DISK_OFFSET);
}
if (fs == NULL)
return;