net/mlx5e: Prevent casting overflow
On 64 bits architectures unsigned long is longer than u32,
casting to unsigned long will result in overflow.
We need to first allocate an unsigned long variable, then assign the
wanted value.
Fixes: 665bc53969
('net/mlx5e: Use new ethtool get/set link ksettings API')
Signed-off-by: Gal Pressman <galp@mellanox.com>
Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
e7e31ca43d
commit
7abc211077
|
@ -659,9 +659,10 @@ out:
|
|||
static void ptys2ethtool_supported_link(unsigned long *supported_modes,
|
||||
u32 eth_proto_cap)
|
||||
{
|
||||
unsigned long proto_cap = eth_proto_cap;
|
||||
int proto;
|
||||
|
||||
for_each_set_bit(proto, (unsigned long *)ð_proto_cap, MLX5E_LINK_MODES_NUMBER)
|
||||
for_each_set_bit(proto, &proto_cap, MLX5E_LINK_MODES_NUMBER)
|
||||
bitmap_or(supported_modes, supported_modes,
|
||||
ptys2ethtool_table[proto].supported,
|
||||
__ETHTOOL_LINK_MODE_MASK_NBITS);
|
||||
|
@ -670,9 +671,10 @@ static void ptys2ethtool_supported_link(unsigned long *supported_modes,
|
|||
static void ptys2ethtool_adver_link(unsigned long *advertising_modes,
|
||||
u32 eth_proto_cap)
|
||||
{
|
||||
unsigned long proto_cap = eth_proto_cap;
|
||||
int proto;
|
||||
|
||||
for_each_set_bit(proto, (unsigned long *)ð_proto_cap, MLX5E_LINK_MODES_NUMBER)
|
||||
for_each_set_bit(proto, &proto_cap, MLX5E_LINK_MODES_NUMBER)
|
||||
bitmap_or(advertising_modes, advertising_modes,
|
||||
ptys2ethtool_table[proto].advertised,
|
||||
__ETHTOOL_LINK_MODE_MASK_NBITS);
|
||||
|
|
Loading…
Reference in a new issue