ata: libata-core: fix parameter type in ata_xfer_mode2shift()
authorSergey Shtylyov <s.shtylyov@omp.ru>
Sat, 9 Apr 2022 19:13:56 +0000 (22:13 +0300)
committerDamien Le Moal <damien.lemoal@opensource.wdc.com>
Tue, 12 Apr 2022 00:35:04 +0000 (09:35 +0900)
The data transfer mode that corresponds to the 'xfer_mode' parameter for
ata_xfer_mode2shift() is a 8-bit *unsigned* value.  Using *unsigned long*
to declare the parameter leads to a problematic implicit *int* to *unsigned
long* cast and was most probably a result of a copy/paste mistake -- use
the 'u8' type instead, as in ata_xfer_mode2mask()...

Found by Linux Verification Center (linuxtesting.org) with the SVACE static
analysis tool.

Signed-off-by: Sergey Shtylyov <s.shtylyov@omp.ru>
Signed-off-by: Damien Le Moal <damien.lemoal@opensource.wdc.com>
drivers/ata/libata-core.c
include/linux/libata.h

index 23d1dc5..eb8ff7b 100644 (file)
@@ -898,7 +898,7 @@ EXPORT_SYMBOL_GPL(ata_xfer_mode2mask);
  *     RETURNS:
  *     Matching xfer_shift, -1 if no match found.
  */
-int ata_xfer_mode2shift(unsigned long xfer_mode)
+int ata_xfer_mode2shift(u8 xfer_mode)
 {
        const struct ata_xfer_ent *ent;
 
index 1610712..732de90 100644 (file)
@@ -1110,7 +1110,7 @@ extern void ata_unpack_xfermask(unsigned long xfer_mask,
                        unsigned long *udma_mask);
 extern u8 ata_xfer_mask2mode(unsigned long xfer_mask);
 extern unsigned long ata_xfer_mode2mask(u8 xfer_mode);
-extern int ata_xfer_mode2shift(unsigned long xfer_mode);
+extern int ata_xfer_mode2shift(u8 xfer_mode);
 extern const char *ata_mode_string(unsigned long xfer_mask);
 extern unsigned long ata_id_xfermask(const u16 *id);
 extern int ata_std_qc_defer(struct ata_queued_cmd *qc);