Skip to content

Commit e27cd67

Browse files
keestuxgregkh
authored andcommitted
staging: gpib: avoid unintended sign extension
The code was basically like this (assuming size_t can be u64) var_u64 |= var_u8 << 24 var_u8 is first promoted to i32 and then the shift is done. Next, it is promoted to u64 by first signextending to 64 bits. This is very unlikely what was intended. So now it is first forced to u32. var_u64 |= (u32)var_u8 << 24 This was detected by Coverity, CID 1600792. Fixes: 4c41fe8 ("staging: gpib: Add Agilent/Keysight 82357x USB GPIB driver") Signed-off-by: Kees Bakker <kees@ijzerbout.nl> Link: https://lore.kernel.org/r/20241108201207.1194F18DDF5@bout3.ijzerbout.nl Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
1 parent 7345316 commit e27cd67

File tree

1 file changed

+4
-4
lines changed

1 file changed

+4
-4
lines changed

drivers/staging/gpib/agilent_82357a/agilent_82357a.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -664,10 +664,10 @@ static ssize_t agilent_82357a_generic_write(gpib_board_t *board, uint8_t *buffer
664664
kfree(status_data);
665665
return -EIO;
666666
}
667-
*bytes_written = status_data[2];
668-
*bytes_written |= status_data[3] << 8;
669-
*bytes_written |= status_data[4] << 16;
670-
*bytes_written |= status_data[5] << 24;
667+
*bytes_written = (u32)status_data[2];
668+
*bytes_written |= (u32)status_data[3] << 8;
669+
*bytes_written |= (u32)status_data[4] << 16;
670+
*bytes_written |= (u32)status_data[5] << 24;
671671

672672
kfree(status_data);
673673
return 0;

0 commit comments

Comments
 (0)