mirror_ubuntu-kernels/drivers/net/ethernet/mscc
Vladimir Oltean 1f778d500d net: mscc: ocelot: avoid type promotion when calling ocelot_ifh_set_dest
Smatch is confused by the fact that a 32-bit BIT(port) macro is passed
as argument to the ocelot_ifh_set_dest function and warns:

ocelot_xmit() warn: should '(((1))) << (dp->index)' be a 64 bit type?
seville_xmit() warn: should '(((1))) << (dp->index)' be a 64 bit type?

The destination port mask is copied into a 12-bit field of the packet,
starting at bit offset 67 and ending at 56.

So this DSA tagging protocol supports at most 12 bits, which is clearly
less than 32. Attempting to send to a port number > 12 will cause the
packing() call to truncate way before there will be 32-bit truncation
due to type promotion of the BIT(port) argument towards u64.

Therefore, smatch's fears that BIT(port) will do the wrong thing and
cause unexpected truncation for "port" values >= 32 are unfounded.
Nonetheless, let's silence the warning by explicitly passing an u64
value to ocelot_ifh_set_dest, such that the compiler does not need to do
a questionable type promotion.

Reported-by: kernel test robot <lkp@intel.com>
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2021-02-15 12:42:19 -08:00
..
Kconfig net: mscc: ocelot: rethink Kconfig dependencies again 2020-07-16 12:46:00 -07:00
Makefile net: mscc: ocelot: initialize watermarks to sane defaults 2021-01-15 20:02:34 -08:00
ocelot_devlink.c net: mscc: ocelot: configure watermarks using devlink-sb 2021-01-15 20:02:35 -08:00
ocelot_flower.c net: mscc: ocelot: store a namespaced VCAP filter ID 2021-01-29 21:24:30 -08:00
ocelot_io.c net: dsa: felix: implement port flushing on .phylink_mac_link_down 2021-02-09 11:41:11 -08:00
ocelot_net.c net: mscc: ocelot: refactor ocelot_port_inject_frame out of ocelot_port_xmit 2021-02-14 17:31:44 -08:00
ocelot_police.c net: mscc: ocelot: move net_device related functions to ocelot_net.c 2020-06-20 17:25:23 -07:00
ocelot_police.h net: mscc: ocelot: unexpose ocelot_vcap_policer_{add,del} 2020-06-20 17:25:23 -07:00
ocelot_ptp.c net: mscc: ocelot: make ocelot_init_timestamp take a const struct ptp_clock_info 2020-09-18 17:52:40 -07:00
ocelot_qs.h
ocelot_rew.h
ocelot_vcap.c net: dsa: felix: perform switch setup for tag_8021q 2021-01-29 21:25:27 -08:00
ocelot_vcap.h net: dsa: felix: perform switch setup for tag_8021q 2021-01-29 21:25:27 -08:00
ocelot_vsc7514.c net: dsa: tag_ocelot_8021q: add support for PTP timestamping 2021-02-14 17:31:44 -08:00
ocelot.c net: mscc: ocelot: avoid type promotion when calling ocelot_ifh_set_dest 2021-02-15 12:42:19 -08:00
ocelot.h net: mscc: ocelot: use common tag parsing code with DSA 2021-02-14 17:31:44 -08:00