]> git.itanic.dy.fi Git - linux-stable/commit
net: ena: Fix potential sign extension issue
authorDavid Arinzon <darinzon@amazon.com>
Wed, 10 Apr 2024 09:13:55 +0000 (09:13 +0000)
committerPaolo Abeni <pabeni@redhat.com>
Thu, 11 Apr 2024 09:21:01 +0000 (11:21 +0200)
commit713a85195aad25d8a26786a37b674e3e5ec09e3c
tree927074558e4ffd3d0b9cc054652333bd587a8658
parentfe3eb406723c7cc293a7bc99b34dce785e4d282d
net: ena: Fix potential sign extension issue

Small unsigned types are promoted to larger signed types in
the case of multiplication, the result of which may overflow.
In case the result of such a multiplication has its MSB
turned on, it will be sign extended with '1's.
This changes the multiplication result.

Code example of the phenomenon:
-------------------------------
u16 x, y;
size_t z1, z2;

x = y = 0xffff;
printk("x=%x y=%x\n",x,y);

z1 = x*y;
z2 = (size_t)x*y;

printk("z1=%lx z2=%lx\n", z1, z2);

Output:
-------
x=ffff y=ffff
z1=fffffffffffe0001 z2=fffe0001

The expected result of ffff*ffff is fffe0001, and without the
explicit casting to avoid the unwanted sign extension we got
fffffffffffe0001.

This commit adds an explicit casting to avoid the sign extension
issue.

Fixes: 689b2bdaaa14 ("net: ena: add functions for handling Low Latency Queues in ena_com")
Signed-off-by: Arthur Kiyanovski <akiyano@amazon.com>
Signed-off-by: David Arinzon <darinzon@amazon.com>
Reviewed-by: Shannon Nelson <shannon.nelson@amd.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
drivers/net/ethernet/amazon/ena/ena_com.c