aboutgitcodebugslistschat
path: root/udp.c
diff options
context:
space:
mode:
authorStefano Brivio <sbrivio@redhat.com>2024-06-21 15:21:26 +0200
committerStefano Brivio <sbrivio@redhat.com>2024-06-24 15:41:38 +0200
commit1ee2ecade3f41e2a3e51c1e580b08cba977a7c8d (patch)
treed8ee43deeeafb0669df4333f08e87bde7f6c9d54 /udp.c
parent054697598f97be70d9244c604db44d1ea230c133 (diff)
downloadpasst-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.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/udp.c b/udp.c
index 8181900..e089ef9 100644
--- a/udp.c
+++ b/udp.c
@@ -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;
+ }
}
}