[PATCH v2] RAS/AMD/ATL: Fix unintended sign extension issue from coverity
From: Karan Sanghavi
Date: Fri Nov 08 2024 - 11:40:56 EST
This error is reported by coverity scan stating as
CID 1593397: (#1 of 1): Unintended sign extension (SIGN_EXTENSION)
sign_extension: Suspicious implicit sign extension: pc
with type u16 (16 bits, unsigned) is promoted in
pc << bit_shifts.pc to type int (32 bits, signed),
then sign-extended to type unsigned long (64 bits, unsigned).
If pc << bit_shifts.pc is greater than 0x7FFFFFFF,
the upper bits of the result will all be 1.
Following the code styleof the file, assigning the u16
value to u32 variable and using it for the bit wise
operation, thus ensuring no unintentional sign
extension occurs.
Signed-off-by: Karan Sanghavi <karansanghvi98@xxxxxxxxx>
---
Coverity Link:
https://scan7.scan.coverity.com/#/project-view/51975/11354?selectedIssue=1593397
---
Changes in v2:
- Assigning pc value to temp variable before left shifting as mentioned
in feedback rather then typecasting pc to u32.
- Link to v1: https://lore.kernel.org/r/20241104-coverity1593397signextension-v1-1-4cfae6532140@xxxxxxxxx
---
drivers/ras/amd/atl/umc.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/drivers/ras/amd/atl/umc.c b/drivers/ras/amd/atl/umc.c
index dc8aa12f63c8..3f4b1f31e14f 100644
--- a/drivers/ras/amd/atl/umc.c
+++ b/drivers/ras/amd/atl/umc.c
@@ -293,7 +293,8 @@ static unsigned long convert_dram_to_norm_addr_mi300(unsigned long addr)
}
/* PC bit */
- addr |= pc << bit_shifts.pc;
+ temp = pc;
+ addr |= temp << bit_shifts.pc;
/* SID bits */
for (i = 0; i < NUM_SID_BITS; i++) {
---
base-commit: 81983758430957d9a5cb3333fe324fd70cf63e7e
change-id: 20241104-coverity1593397signextension-78c9b2c21d51
Best regards,
--
Karan Sanghavi <karansanghvi98@xxxxxxxxx>