diff options
author | Stefano Brivio <sbrivio@redhat.com> | 2024-06-21 15:21:26 +0200 |
---|---|---|
committer | Stefano Brivio <sbrivio@redhat.com> | 2024-06-24 15:41:38 +0200 |
commit | 1ee2ecade3f41e2a3e51c1e580b08cba977a7c8d (patch) | |
tree | d8ee43deeeafb0669df4333f08e87bde7f6c9d54 /udp.c | |
parent | 054697598f97be70d9244c604db44d1ea230c133 (diff) | |
download | passt-1ee2ecade3f41e2a3e51c1e580b08cba977a7c8d.tar passt-1ee2ecade3f41e2a3e51c1e580b08cba977a7c8d.tar.gz passt-1ee2ecade3f41e2a3e51c1e580b08cba977a7c8d.tar.bz2 passt-1ee2ecade3f41e2a3e51c1e580b08cba977a7c8d.tar.lz passt-1ee2ecade3f41e2a3e51c1e580b08cba977a7c8d.tar.xz passt-1ee2ecade3f41e2a3e51c1e580b08cba977a7c8d.tar.zst passt-1ee2ecade3f41e2a3e51c1e580b08cba977a7c8d.zip |
udp: Reduce scope of rport in udp_invert_portmap()2024_06_24.1ee2eca
cppcheck 2.14 warns that the scope of the rport variable could be
reduced: do that, as reverted commit c80fa6a6bb44 ("udp: Make rport
calculation more local") did, but keep the temporary variable of
in_port_t type, otherwise the sum gets promoted to int.
While at it, add a comment explaining why we calculate rport like
this instead of directly using the sum as array index.
Reported-by: David Gibson <david@gibson.dropbear.id.au>
Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
Reviewed-by: David Gibson <david@gibson.dropbear.id.au>
Diffstat (limited to 'udp.c')
-rw-r--r-- | udp.c | 12 |
1 files changed, 10 insertions, 2 deletions
@@ -279,10 +279,18 @@ static void udp_invert_portmap(struct udp_fwd_ports *fwd) "Forward and reverse delta arrays must have same size"); for (i = 0; i < ARRAY_SIZE(fwd->f.delta); i++) { in_port_t delta = fwd->f.delta[i]; - in_port_t rport = i + delta; - if (delta) + if (delta) { + /* Keep rport calculation separate from its usage: we + * need to perform the sum in in_port_t width (that is, + * modulo 65536), but C promotion rules would sum the + * two terms as 'int', if we just open-coded the array + * index as 'i + delta'. + */ + in_port_t rport = i + delta; + fwd->rdelta[rport] = NUM_PORTS - delta; + } } } |