|  | @@ -466,7 +466,10 @@ static int sandev_parse_iso9660 ( struct san_device *sandev ) {
 | 
		
	
		
			
			| 466 | 466 |  		.type = ISO9660_TYPE_PRIMARY,
 | 
		
	
		
			
			| 467 | 467 |  		.id = ISO9660_ID,
 | 
		
	
		
			
			| 468 | 468 |  	};
 | 
		
	
		
			
			| 469 |  | -	struct iso9660_primary_descriptor *primary;
 | 
		
	
		
			
			|  | 469 | +	union {
 | 
		
	
		
			
			|  | 470 | +		struct iso9660_primary_descriptor primary;
 | 
		
	
		
			
			|  | 471 | +		char bytes[ISO9660_BLKSIZE];
 | 
		
	
		
			
			|  | 472 | +	} *scratch;
 | 
		
	
		
			
			| 470 | 473 |  	unsigned int blksize;
 | 
		
	
		
			
			| 471 | 474 |  	unsigned int blksize_shift;
 | 
		
	
		
			
			| 472 | 475 |  	unsigned int lba;
 | 
		
	
	
		
			
			|  | @@ -489,14 +492,14 @@ static int sandev_parse_iso9660 ( struct san_device *sandev ) {
 | 
		
	
		
			
			| 489 | 492 |  	count = ( 1 << blksize_shift );
 | 
		
	
		
			
			| 490 | 493 |  
 | 
		
	
		
			
			| 491 | 494 |  	/* Allocate scratch area */
 | 
		
	
		
			
			| 492 |  | -	primary = malloc ( ISO9660_BLKSIZE );
 | 
		
	
		
			
			| 493 |  | -	if ( ! primary ) {
 | 
		
	
		
			
			|  | 495 | +	scratch = malloc ( ISO9660_BLKSIZE );
 | 
		
	
		
			
			|  | 496 | +	if ( ! scratch ) {
 | 
		
	
		
			
			| 494 | 497 |  		rc = -ENOMEM;
 | 
		
	
		
			
			| 495 | 498 |  		goto err_alloc;
 | 
		
	
		
			
			| 496 | 499 |  	}
 | 
		
	
		
			
			| 497 | 500 |  
 | 
		
	
		
			
			| 498 | 501 |  	/* Read primary volume descriptor */
 | 
		
	
		
			
			| 499 |  | -	if ( ( rc = sandev_rw ( sandev, lba, count, virt_to_user ( primary ),
 | 
		
	
		
			
			|  | 502 | +	if ( ( rc = sandev_rw ( sandev, lba, count, virt_to_user ( scratch ),
 | 
		
	
		
			
			| 500 | 503 |  				block_read ) ) != 0 ) {
 | 
		
	
		
			
			| 501 | 504 |  		DBGC ( sandev, "SAN %#02x could not read ISO9660 primary"
 | 
		
	
		
			
			| 502 | 505 |  		       "volume descriptor: %s\n",
 | 
		
	
	
		
			
			|  | @@ -505,7 +508,8 @@ static int sandev_parse_iso9660 ( struct san_device *sandev ) {
 | 
		
	
		
			
			| 505 | 508 |  	}
 | 
		
	
		
			
			| 506 | 509 |  
 | 
		
	
		
			
			| 507 | 510 |  	/* Configure as CD-ROM if applicable */
 | 
		
	
		
			
			| 508 |  | -	if ( memcmp ( primary, &primary_check, sizeof ( primary_check ) ) == 0){
 | 
		
	
		
			
			|  | 511 | +	if ( memcmp ( &scratch->primary.fixed, &primary_check,
 | 
		
	
		
			
			|  | 512 | +		      sizeof ( primary_check ) ) == 0 ) {
 | 
		
	
		
			
			| 509 | 513 |  		DBGC ( sandev, "SAN %#02x contains an ISO9660 filesystem; "
 | 
		
	
		
			
			| 510 | 514 |  		       "treating as CD-ROM\n", sandev->drive );
 | 
		
	
		
			
			| 511 | 515 |  		sandev->blksize_shift = blksize_shift;
 | 
		
	
	
		
			
			|  | @@ -513,7 +517,7 @@ static int sandev_parse_iso9660 ( struct san_device *sandev ) {
 | 
		
	
		
			
			| 513 | 517 |  	}
 | 
		
	
		
			
			| 514 | 518 |  
 | 
		
	
		
			
			| 515 | 519 |   err_rw:
 | 
		
	
		
			
			| 516 |  | -	free ( primary );
 | 
		
	
		
			
			|  | 520 | +	free ( scratch );
 | 
		
	
		
			
			| 517 | 521 |   err_alloc:
 | 
		
	
		
			
			| 518 | 522 |   invalid_blksize:
 | 
		
	
		
			
			| 519 | 523 |  	return rc;
 |