Skip to content

Commit cb12d72

Browse files
Colin Ian Kingdavem330
authored andcommitted
atm: he: fix sign-extension overflow on large shift
Shifting the 1 by exp by an int can lead to sign-extension overlow when exp is 31 since 1 is an signed int and sign-extending this result to an unsigned long long will set the upper 32 bits. Fix this by shifting an unsigned long. Detected by cppcheck: (warning) Shifting signed 32-bit value by 31 bits is undefined behaviour Signed-off-by: Colin Ian King <colin.king@canonical.com> Signed-off-by: David S. Miller <davem@davemloft.net>
1 parent 0f149c9 commit cb12d72

File tree

1 file changed

+1
-1
lines changed

1 file changed

+1
-1
lines changed

drivers/atm/he.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -718,7 +718,7 @@ static int he_init_cs_block_rcm(struct he_dev *he_dev)
718718
instead of '/ 512', use '>> 9' to prevent a call
719719
to divdu3 on x86 platforms
720720
*/
721-
rate_cps = (unsigned long long) (1 << exp) * (man + 512) >> 9;
721+
rate_cps = (unsigned long long) (1UL << exp) * (man + 512) >> 9;
722722

723723
if (rate_cps < 10)
724724
rate_cps = 10; /* 2.2.1 minimum payload rate is 10 cps */

0 commit comments

Comments
 (0)