re: [SCSI] sd: Ensure we correctly disable devices with unknown protection type

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Martin,

The patch fe542396da73: "[SCSI] sd: Ensure we correctly disable
devices with unknown protection type" from Sep 21, 2012, leads to the
following warning:
include/scsi/scsi_host.h:879 scsi_host_dif_capable()
	 warn: buffer overflow 'cap' 4 <= 4

   838  enum scsi_host_prot_capabilities {
   839          SHOST_DIF_TYPE1_PROTECTION = 1 << 0, /* T10 DIF Type 1 */
   840          SHOST_DIF_TYPE2_PROTECTION = 1 << 1, /* T10 DIF Type 2 */
   841          SHOST_DIF_TYPE3_PROTECTION = 1 << 2, /* T10 DIF Type 3 */
   842  
   843          SHOST_DIX_TYPE0_PROTECTION = 1 << 3, /* DIX between OS and HBA only */
   844          SHOST_DIX_TYPE1_PROTECTION = 1 << 4, /* DIX with DIF Type 1 */
   845          SHOST_DIX_TYPE2_PROTECTION = 1 << 5, /* DIX with DIF Type 2 */
   846          SHOST_DIX_TYPE3_PROTECTION = 1 << 6, /* DIX with DIF Type 3 */
   847  };

   869  static inline unsigned int scsi_host_dif_capable(struct Scsi_Host *shost, unsigned int target_type)
   870  {
   871          static unsigned char cap[] = { 0,
   872                                         SHOST_DIF_TYPE1_PROTECTION,
   873                                         SHOST_DIF_TYPE2_PROTECTION,
   874                                         SHOST_DIF_TYPE3_PROTECTION };
   875  
   876          if (target_type > SHOST_DIF_TYPE3_PROTECTION)
   877                  return 0;
   878  
   879          return shost->prot_capabilities & cap[target_type] ? target_type : 0;
                                                  ^^^^^^^^^^^^^^^^
It looks like we're doing cap[1 << 2] here not cap[2].

   880  }

   882  static inline unsigned int scsi_host_dix_capable(struct Scsi_Host *shost, unsigned int target_type)
   883  {
   884  #if defined(CONFIG_BLK_DEV_INTEGRITY)
   885          static unsigned char cap[] = { SHOST_DIX_TYPE0_PROTECTION,
   886                                         SHOST_DIX_TYPE1_PROTECTION,
   887                                         SHOST_DIX_TYPE2_PROTECTION,
   888                                         SHOST_DIX_TYPE3_PROTECTION };
   889  
   890          if (target_type > SHOST_DIX_TYPE3_PROTECTION)
   891                  return 0;
   892  
   893          return shost->prot_capabilities & cap[target_type];
                                                  ^^^^^^^^^^^^^^^^^
We're doing cap[1 << 6] here, not cap[6];

   894  #endif
   895          return 0;
   896  }

regards,
dan carpenter

--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [SCSI Target Devel]     [Linux SCSI Target Infrastructure]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Samba]     [Device Mapper]
  Powered by Linux