diff options
author | Pawel Jakub Dawidek <pjd@FreeBSD.org> | 2005-08-30 15:18:54 +0000 |
---|---|---|
committer | Pawel Jakub Dawidek <pjd@FreeBSD.org> | 2005-08-30 15:18:54 +0000 |
commit | 9d31330c07cb94780b51d8ea8cbd947ab43aeb58 (patch) | |
tree | 847d972668234dfde2837b6085105947b3c547a5 | |
parent | 25aef68e4cfa69c2ba2b18640f8ddb770c89d9d3 (diff) |
Notes
-rw-r--r-- | sys/geom/label/g_label_ext2fs.c | 3 | ||||
-rw-r--r-- | sys/geom/label/g_label_iso9660.c | 6 | ||||
-rw-r--r-- | sys/geom/label/g_label_reiserfs.c | 16 |
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; |