| ba9cf6b4 | 16-Oct-2024 |
Mauro Carvalho Chehab <[email protected]> |
media: pulse8-cec: fix data timestamp at pulse8_setup()
As pointed by Coverity, there is a hidden overflow condition there. As date is signed and u8 is unsigned, doing:
date = (data[0] << 24)
Wit
media: pulse8-cec: fix data timestamp at pulse8_setup()
As pointed by Coverity, there is a hidden overflow condition there. As date is signed and u8 is unsigned, doing:
date = (data[0] << 24)
With a value bigger than 07f will make all upper bits of date 0xffffffff. This can be demonstrated with this small code:
<code> typedef int64_t time64_t; typedef uint8_t u8;
int main(void) { u8 data[] = { 0xde ,0xad , 0xbe, 0xef }; time64_t date;
date = (data[0] << 24) | (data[1] << 16) | (data[2] << 8) | data[3]; printf("Invalid data = 0x%08lx\n", date);
date = ((unsigned)data[0] << 24) | (data[1] << 16) | (data[2] << 8) | data[3]; printf("Expected data = 0x%08lx\n", date);
return 0; } </code>
Fix it by converting the upper bit calculation to unsigned.
Fixes: cea28e7a55e7 ("media: pulse8-cec: reorganize function order") Cc: [email protected] Signed-off-by: Mauro Carvalho Chehab <[email protected]>
show more ...
|