]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[block] Quell spurious Coverity size mismatch warning
authorMichael Brown <mcb30@ipxe.org>
Wed, 22 Mar 2017 09:45:28 +0000 (11:45 +0200)
committerMichael Brown <mcb30@ipxe.org>
Wed, 22 Mar 2017 09:45:28 +0000 (11:45 +0200)
Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/core/sanboot.c

index 95fa5c4eed9eb63435e4b2c5773668cd6c2ba3a9..88d254ff8dd4e6b83fab690e38570aae13972627 100644 (file)
@@ -466,7 +466,10 @@ static int sandev_parse_iso9660 ( struct san_device *sandev ) {
                .type = ISO9660_TYPE_PRIMARY,
                .id = ISO9660_ID,
        };
-       struct iso9660_primary_descriptor *primary;
+       union {
+               struct iso9660_primary_descriptor primary;
+               char bytes[ISO9660_BLKSIZE];
+       } *scratch;
        unsigned int blksize;
        unsigned int blksize_shift;
        unsigned int lba;
@@ -489,14 +492,14 @@ static int sandev_parse_iso9660 ( struct san_device *sandev ) {
        count = ( 1 << blksize_shift );
 
        /* Allocate scratch area */
-       primary = malloc ( ISO9660_BLKSIZE );
-       if ( ! primary ) {
+       scratch = malloc ( ISO9660_BLKSIZE );
+       if ( ! scratch ) {
                rc = -ENOMEM;
                goto err_alloc;
        }
 
        /* Read primary volume descriptor */
-       if ( ( rc = sandev_rw ( sandev, lba, count, virt_to_user ( primary ),
+       if ( ( rc = sandev_rw ( sandev, lba, count, virt_to_user ( scratch ),
                                block_read ) ) != 0 ) {
                DBGC ( sandev, "SAN %#02x could not read ISO9660 primary"
                       "volume descriptor: %s\n",
@@ -505,7 +508,8 @@ static int sandev_parse_iso9660 ( struct san_device *sandev ) {
        }
 
        /* Configure as CD-ROM if applicable */
-       if ( memcmp ( primary, &primary_check, sizeof ( primary_check ) ) == 0){
+       if ( memcmp ( &scratch->primary.fixed, &primary_check,
+                     sizeof ( primary_check ) ) == 0 ) {
                DBGC ( sandev, "SAN %#02x contains an ISO9660 filesystem; "
                       "treating as CD-ROM\n", sandev->drive );
                sandev->blksize_shift = blksize_shift;
@@ -513,7 +517,7 @@ static int sandev_parse_iso9660 ( struct san_device *sandev ) {
        }
 
  err_rw:
-       free ( primary );
+       free ( scratch );
  err_alloc:
  invalid_blksize:
        return rc;