udp: Reduce scope of rport in udp_invert_portmap()

cppcheck 2.14 warns that the scope of the rport variable could be
reduced: do that, as reverted commit c80fa6a6bb ("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>
This commit is contained in:
Stefano Brivio 2024-06-21 15:21:26 +02:00
parent 054697598f
commit 1ee2ecade3

10
udp.c
View file

@ -279,12 +279,20 @@ static void udp_invert_portmap(struct udp_fwd_ports *fwd)
"Forward and reverse delta arrays must have same size"); "Forward and reverse delta arrays must have same size");
for (i = 0; i < ARRAY_SIZE(fwd->f.delta); i++) { for (i = 0; i < ARRAY_SIZE(fwd->f.delta); i++) {
in_port_t delta = fwd->f.delta[i]; in_port_t delta = fwd->f.delta[i];
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; in_port_t rport = i + delta;
if (delta)
fwd->rdelta[rport] = NUM_PORTS - delta; fwd->rdelta[rport] = NUM_PORTS - delta;
} }
} }
}
/** /**
* udp_update_l2_buf() - Update L2 buffers with Ethernet and IPv4 addresses * udp_update_l2_buf() - Update L2 buffers with Ethernet and IPv4 addresses