]> err.no Git - util-linux/commitdiff
libblkid: add missing packed attributes
authorKarel Zak <kzak@redhat.com>
Fri, 16 Oct 2009 00:34:28 +0000 (02:34 +0200)
committerKarel Zak <kzak@redhat.com>
Fri, 16 Oct 2009 00:34:28 +0000 (02:34 +0200)
This patch add __attribute__((packed)) to almost all superblock and
disk label definitions. Well, in many cases this is not necessary, but
it's a cheap way how to keep the code robust...

Signed-off-by: Karel Zak <kzak@redhat.com>
26 files changed:
shlibs/blkid/src/partitions/bsd.c
shlibs/blkid/src/partitions/mac.c
shlibs/blkid/src/partitions/sgi.c
shlibs/blkid/src/partitions/solaris_x86.c
shlibs/blkid/src/partitions/unixware.c
shlibs/blkid/src/superblocks/adaptec_raid.c
shlibs/blkid/src/superblocks/cramfs.c
shlibs/blkid/src/superblocks/ext.c
shlibs/blkid/src/superblocks/gfs.c
shlibs/blkid/src/superblocks/hpfs.c
shlibs/blkid/src/superblocks/iso9660.c
shlibs/blkid/src/superblocks/luks.c
shlibs/blkid/src/superblocks/ntfs.c
shlibs/blkid/src/superblocks/nvidia_raid.c
shlibs/blkid/src/superblocks/reiserfs.c
shlibs/blkid/src/superblocks/romfs.c
shlibs/blkid/src/superblocks/silicon_raid.c
shlibs/blkid/src/superblocks/squashfs.c
shlibs/blkid/src/superblocks/swap.c
shlibs/blkid/src/superblocks/sysv.c
shlibs/blkid/src/superblocks/ubifs.c [changed mode: 0755->0644]
shlibs/blkid/src/superblocks/udf.c
shlibs/blkid/src/superblocks/vfat.c
shlibs/blkid/src/superblocks/via_raid.c
shlibs/blkid/src/superblocks/xfs.c
shlibs/blkid/src/superblocks/zfs.c

index 829e3d01fb106eb9d0072400a14300a204f0d3f3..9d0d7e5ef08a74f40ca448cbcb1c71a7f4450256 100644 (file)
@@ -89,7 +89,7 @@ struct bsd_disklabel {
                uint8_t         p_fstype;       /* filesystem type, see below */
                uint8_t         p_frag;         /* filesystem fragments per block */
                uint16_t        p_cpg;          /* filesystem cylinders per group */
-       } d_partitions[BSD_MAXPARTITIONS];      /* actually may be more */
+       } __attribute__((packed)) d_partitions[BSD_MAXPARTITIONS];      /* actually may be more */
 } __attribute__((packed));
 
 
index c51b11abab85f85468546644db906ee164137f24..7f4a30b0a21ba22ece10ef3f8417a50743a6d433 100644 (file)
@@ -42,7 +42,7 @@ struct mac_partition {
        char            processor[16];  /* identifies ISA of boot */
 
        /* there is more stuff after this that we don't need */
-};
+} __attribute__((packed));
 
 /*
  * Driver descriptor structure, in block 0
@@ -54,7 +54,7 @@ struct mac_driver_desc {
        uint32_t        block_count;    /* number of blocks on the device */
 
        /* there is more stuff after this that we don't need */
-};
+} __attribute__((packed));
 
 static inline unsigned char *get_mac_block(
                                        blkid_probe pr,
index 5ebf9dedb43278eea84fb32a346ccec47a877ed1..c1094b7866869f22ce5dc8737966ac56002a5ae4 100644 (file)
@@ -47,7 +47,7 @@ struct sgi_device_parameter {
        uint16_t xylogics_gap2;
        uint16_t xylogics_readgate;
        uint16_t xylogics_writecont;
-};
+} __attribute__((packed));
 
 struct sgi_disklabel {
        uint32_t magic;                 /* magic number */
@@ -61,18 +61,18 @@ struct sgi_disklabel {
                unsigned char name[8];  /* name of volume */
                uint32_t block_num;     /* logical block number */
                uint32_t num_bytes;     /* how big, in bytes */
-       } volume[15];
+       } __attribute__((packed)) volume[15];
 
        struct sgi_partition {
                uint32_t num_blocks;    /* size in logical blocks */
                uint32_t first_block;   /* first logical block */
                uint32_t type;          /* type of this partition */
-       } partitions[SGI_MAXPARTITIONS];
+       } __attribute__((packed)) partitions[SGI_MAXPARTITIONS];
 
        /* checksum is the 32bit 2's complement sum of the disklabel */
        uint32_t csum;                  /* disk label checksum */
        uint32_t padding;               /* padding */
-};
+} __attribute__((packed));
 
 static uint32_t count_checksum(struct sgi_disklabel *label)
 {
index 964c406c77ffd6e3698b866f7327b0f5b5fa4e84..fe39a10363e7120e7e4a5222abb871bff6d2ede8 100644 (file)
@@ -39,7 +39,7 @@ struct solaris_slice {
        uint16_t s_flag;     /* permission flags */
        uint32_t s_start;    /* start sector no of partition */
        uint32_t s_size;     /* # of blocks in partition */
-};
+} __attribute__((packed));
 
 struct solaris_vtoc {
        unsigned int v_bootinfo[3];     /* info needed by mboot (unsupported) */
@@ -55,7 +55,7 @@ struct solaris_vtoc {
 
        unsigned int timestamp[SOLARIS_MAXPARTITIONS]; /* timestamp (unsupported) */
        char         v_asciilabel[128]; /* for compatibility */
-};
+} __attribute__((packed));
 
 static int probe_solaris_pt(blkid_probe pr, const struct blkid_idmag *mag)
 {
index b4c8f6be2c11d0feb47a93a6e4fd32f47756e121..70b6626f35ebbc2f751b862c390e7ab5382491aa 100644 (file)
@@ -58,7 +58,7 @@ struct unixware_partition {
        uint16_t        s_flags;        /* permission flags */
        uint32_t        start_sect;     /* starting sector */
        uint32_t        nr_sects;       /* number of sectors */
-};
+} __attribute__((packed));
 
 struct unixware_disklabel {
        uint32_t        d_type;         /* drive type */
@@ -91,7 +91,7 @@ struct unixware_disklabel {
 
                struct unixware_partition
                        v_slice[UNIXWARE_MAXPARTITIONS]; /* partition */
-       } vtoc;
+       } __attribute__((packed)) vtoc;
 };
 
 static int probe_unixware_pt(blkid_probe pr, const struct blkid_idmag *mag)
index 03f44ad7b3d83a20530d3e3b76bd406cb0f93053..d7a42a67ab8a4d95e8b1de370d46dec94a2bdc4a 100644 (file)
@@ -67,7 +67,7 @@ struct adaptec_metadata {
        uint32_t        raidtbl;
        uint16_t        raidline;
        uint8_t         res9[0xF6];
-};
+} __attribute__((packed));
 
 #define AD_SIGNATURE   "DPTM"
 #define AD_MAGIC       0x37FC4D1E
index 8a70f80bf3e2b6393b38388d92007d27538d16d4..b58ed08cb1052a392641ec7ca8ef55143c8b89c2 100644 (file)
@@ -30,9 +30,9 @@ struct cramfs_super
                uint32_t        edition;
                uint32_t        blocks;
                uint32_t        files;
-       } info;
+       } __attribute__((packed)) info;
        uint8_t         name[16];
-};
+} __attribute__((packed));
 
 static int probe_cramfs(blkid_probe pr, const struct blkid_idmag *mag)
 {
index 4bccd2e797b7bfaedbb0643b6d147a06aaad6654..b1bc2a8a7c4a446d82914c7a4c4b4e648cb88bf7 100644 (file)
@@ -76,7 +76,7 @@ struct ext2_super_block {
        uint64_t                s_mmp_block;
        uint32_t                s_raid_stripe_width;
        uint32_t                s_reserved[163];
-};
+} __attribute__((packed));
 
 /* magic string */
 #define EXT_SB_MAGIC                           "\123\357"
index a7ff6615f5a0dda769159ae65e37dfc037a1d8a3..8ad81bcb4819c716a8052a00c6dcf0794230cbb9 100644 (file)
@@ -56,7 +56,7 @@ struct gfs2_sb {
        struct gfs2_inum __pad3; /* Was quota inode in gfs1 */
        struct gfs2_inum __pad4; /* Was licence inode in gfs1 */
        uint8_t sb_uuid[16]; /* The UUID maybe 0 for backwards compat */
-};
+} __attribute__((packed));
 
 static int probe_gfs(blkid_probe pr, const struct blkid_idmag *mag)
 {
index 406c50aa45b3cc9f172fb34e632b77e426b91e8c..f9b851a474158413b5e015af72cfd9a3d139139f 100644 (file)
@@ -39,20 +39,20 @@ struct hpfs_boot_block
        uint8_t         sig_hpfs[8];
        uint8_t         pad[448];
        uint8_t         magic[2];
-};
+} __attribute__((packed));
 
 struct hpfs_super_block
 {
        uint8_t         magic[4];
        uint8_t         magic1[4];
        uint8_t         version;
-};
+} __attribute__((packed));
 
 struct hpfs_spare_super
 {
        uint8_t         magic[4];
        uint8_t         magic1[4];
-};
+} __attribute__((packed));
 
 
 #define HPFS_SB_OFFSET                 0x2000
index ffab1daffee93274400177f5ca34bfd45048a04c..9f3ce2e601544dcf3b15e3e939b2d9da9968ac0f 100644 (file)
@@ -30,7 +30,7 @@ struct iso_volume_descriptor {
        unsigned char   unused[8];
        unsigned char   space_size[8];
        unsigned char   escape_sequences[8];
-};
+} __attribute__((packed));
 
 #define ISO_SUPERBLOCK_OFFSET          0x8000
 #define ISO_SECTOR_SIZE                        0x800
@@ -47,7 +47,7 @@ struct high_sierra_volume_descriptor {
        unsigned char   unused1;
        unsigned char   system_id[32];
        unsigned char   volume_id[32];
-};
+} __attribute__((packed));
 
 /* returns 1 if the begin of @ascii is equal to @utf16 string.
  */
index 486779d2ba1c1b79e7e396659320bd1918d48017..0af85b531123760ad3052dcec82775fb4328720d 100644 (file)
@@ -37,7 +37,7 @@ struct luks_phdr {
        uint8_t         mkDigestSalt[LUKS_SALTSIZE];
        uint32_t        mkDigestIterations;
        uint8_t         uuid[UUID_STRING_L];
-};
+} __attribute__((packed));
 
 static int probe_luks(blkid_probe pr, const struct blkid_idmag *mag)
 {
index 21a2d8dd5eca61e6a59028c7e750bcc39ccadbb6..eeba2b69cfcfc0a5caa579be65b41d7babbd65fa 100644 (file)
@@ -27,7 +27,7 @@ struct ntfs_super_block {
        uint8_t         reserved2[3];
        uint64_t        volume_serial;
        uint16_t        checksum;
-};
+} __attribute__((packed));
 
 struct master_file_table_record {
        uint32_t        magic;
index da989e07856f921ec0e0ebfbd0c61a7d3dfc124a..8ce7f12a37938779fa2cfcfb1d197542f26031f2 100644 (file)
@@ -21,7 +21,7 @@ struct nv_metadata {
        uint32_t        size;
        uint32_t        chksum;
        uint16_t        version;
-};
+} __attribute__((packed));
 
 #define NVIDIA_SIGNATURE               "NVIDIA"
 
index 341470ab84b933cb687caedd2dfee3b141143428..4222a30751217d9ff49cb8cd037f6198a64fa789 100644 (file)
@@ -28,7 +28,7 @@ struct reiserfs_super_block {
        uint32_t        rs_dummy4[5];
        unsigned char   rs_uuid[16];
        char            rs_label[16];
-};
+} __attribute__((packed));
 
 struct reiser4_super_block {
        unsigned char   rs4_magic[16];
@@ -36,7 +36,7 @@ struct reiser4_super_block {
        unsigned char   rs4_uuid[16];
        unsigned char   rs4_label[16];
        uint64_t        rs4_dummy2;
-};
+} __attribute__((packed));
 
 static int probe_reiser(blkid_probe pr, const struct blkid_idmag *mag)
 {
index 3b3237175bf2c184300b6f1d901c6281f46a97bb..91ef996fee620cc11b8b22fe70289aa25ed5868d 100644 (file)
@@ -21,7 +21,7 @@ struct romfs_super_block {
        unsigned char   ros_magic[8];
        uint32_t        ros_dummy1[2];
        unsigned char   ros_volume[16];
-};
+} __attribute__((packed));
 
 static int probe_romfs(blkid_probe pr, const struct blkid_idmag *mag)
 {
index 08406b272596f4310dec0a82b2416475199d07f4..2144e5052bc0f421462fade7260273391dc34984 100644 (file)
@@ -35,7 +35,7 @@ struct silicon_metadata {
        uint16_t        vendor_id;
        uint16_t        minor_ver;
        uint16_t        major_ver;
-};
+} __attribute__((packed));
 
 #define SILICON_MAGIC          0x2F000000
 
index 04f9e71ceb9524e9cf404b22767b6d1c85c33f13..45f102917603f0a2116326030e265be11976390f 100644 (file)
@@ -26,7 +26,7 @@ struct sqsh_super_block {
        uint32_t        directory_table_start_2;
        uint16_t        s_major;
        uint16_t        s_minor;
-};
+} __attribute__((packed));
 
 static int probe_squashfs(blkid_probe pr, const struct blkid_idmag *mag)
 {
index 5f7dd107a14f87eeafe522ba069152db24710236..4fb4ab7a0da6f3dd2d8bae43f5b92e27672ae449 100644 (file)
@@ -28,7 +28,7 @@ struct swap_header_v1_2 {
        unsigned char   volume[16];
        uint32_t        padding[117];
        uint32_t        badpages[1];
-};
+} __attribute__((packed));
 
 #define PAGESIZE_MIN   0xff6   /* 4086 (arm, i386, ...) */
 #define PAGESIZE_MAX   0xfff6  /* 65526 (ia64) */
index 82e6a1facb7df9aefbb687804a5a9cb0bfea43b9..530e860f08e354e4c0085e6646b4a394e98dfeb3 100644 (file)
@@ -39,7 +39,7 @@ struct xenix_super_block {
        uint8_t         s_fill[371];
        uint32_t        s_magic;
        uint32_t        s_type;
-};
+} __attribute__((packed));
 
 
 #define SYSV_NICINOD                   100
old mode 100755 (executable)
new mode 100644 (file)
index 3b972ee909c1ae7d46c5eea10884ff161bb9d216..55c96adb3b0192ed40049202ef363dde9ab833d2 100644 (file)
@@ -28,28 +28,32 @@ struct volume_descriptor {
                uint16_t        crc;
                uint16_t        crc_len;
                uint32_t        location;
-       } tag;
+       } __attribute__((packed)) tag;
+
        union {
                struct anchor_descriptor {
                        uint32_t        length;
                        uint32_t        location;
-               } anchor;
+               } __attribute__((packed)) anchor;
+
                struct primary_descriptor {
                        uint32_t        seq_num;
                        uint32_t        desc_num;
                        struct dstring {
                                uint8_t clen;
                                uint8_t c[31];
-                       } ident;
-               } primary;
-       } type;
-};
+                       } __attribute__((packed)) ident;
+               } __attribute__((packed)) primary;
+
+       } __attribute__((packed)) type;
+
+} __attribute__((packed));
 
 struct volume_structure_descriptor {
        uint8_t         type;
        uint8_t         id[5];
        uint8_t         version;
-};
+} __attribute__((packed));
 
 #define UDF_VSD_OFFSET                 0x8000
 
index c47addbe74ff338aecf3cd075f566913340602cc..2ba7ded10166b7413583441b7a19478ead5ed4c9 100644 (file)
@@ -47,7 +47,7 @@ struct vfat_super_block {
 /* 52*/        unsigned char   vs_magic[8];
 /* 5a*/        unsigned char   vs_dummy2[0x1fe - 0x5a];
 /*1fe*/        unsigned char   vs_pmagic[2];
-};
+} __attribute__((packed));
 
 /* Yucky misaligned values */
 struct msdos_super_block {
@@ -73,7 +73,7 @@ struct msdos_super_block {
 /* 36*/        unsigned char   ms_magic[8];
 /* 3e*/        unsigned char   ms_dummy2[0x1fe - 0x3e];
 /*1fe*/        unsigned char   ms_pmagic[2];
-};
+} __attribute__((packed));
 
 struct vfat_dir_entry {
        uint8_t         name[11];
@@ -87,7 +87,7 @@ struct vfat_dir_entry {
        uint16_t        date_write;
        uint16_t        cluster_low;
        uint32_t        size;
-};
+} __attribute__((packed));
 
 struct fat32_fsinfo {
        uint8_t signature1[4];
@@ -96,7 +96,7 @@ struct fat32_fsinfo {
        uint32_t free_clusters;
        uint32_t next_cluster;
        uint32_t reserved2[4];
-};
+} __attribute__((packed));
 
 /* maximum number of clusters */
 #define FAT12_MAX 0xFF4
index b2d4efc5063527d571dd1f674a8faecb4b3b4c11..fc974a701a8d775e79a700d8e7415a236c2dda42 100644 (file)
@@ -27,10 +27,10 @@ struct via_metadata {
                uint32_t        capacity_low;
                uint32_t        capacity_high;
                uint32_t        serial_checksum;
-       } array;
+       } __attribute__((packed)) array;
        uint32_t        serial_checksum[8];
        uint8_t         checksum;
-};
+} __attribute__((packed));
 
 #define VIA_SIGNATURE          0xAA55
 
index ee4e338d7183d971e2424ee8a1e3d987a6940229..1399fe13a4c08592034b0f804c97fe392ea3e645 100644 (file)
@@ -32,7 +32,7 @@ struct xfs_super_block {
        uint64_t        xs_icount;
        uint64_t        xs_ifree;
        uint64_t        xs_fdblocks;
-};
+} __attribute__((packed));
 
 static int probe_xfs(blkid_probe pr, const struct blkid_idmag *mag)
 {
index 02033af1f87bdaa95963bc5bb1ee79e22985fd92..2d626427f4b8e2884c694eff00066df0f3c26954 100644 (file)
@@ -24,7 +24,7 @@ struct zfs_uberblock {
        uint64_t        ub_guid_sum;    /* sum of all vdev guids        */
        uint64_t        ub_timestamp;   /* UTC time of last sync        */
        /*blkptr_t      ub_rootbp;*/    /* MOS objset_phys_t            */
-};
+} __attribute__((packed));
 
 static int probe_zfs(blkid_probe pr, const struct blkid_idmag *mag)
 {