]> git.ipfire.org Git - thirdparty/iproute2.git/commitdiff
ip: Fix rx_otherhost_dropped support
authorPetr Machata <petrm@nvidia.com>
Tue, 28 Jun 2022 10:19:11 +0000 (12:19 +0200)
committerDavid Ahern <dsahern@kernel.org>
Wed, 6 Jul 2022 14:47:58 +0000 (08:47 -0600)
The commit cited below added a new column to print_stats64(). However it
then updated only one size_columns() call site, neglecting to update the
remaining three. As a result, in those not-updated invocations,
size_columns() now accesses a vararg argument that is not being passed,
which is undefined behavior.

Fixes: cebf67a35d8a ("show rx_otherehost_dropped stat in ip link show")
CC: Tariq Toukan <tariqt@nvidia.com>
CC: Itay Aveksis <itayav@nvidia.com>
Signed-off-by: Petr Machata <petrm@nvidia.com>
Signed-off-by: David Ahern <dsahern@kernel.org>
ip/ipaddress.c

index 5387b6a6bcb26ee52635b811ac2d9105575f880b..610bdbde3a056c7ecb3f578a7aacba9b6e04486b 100644 (file)
@@ -775,10 +775,12 @@ void print_stats64(FILE *fp, struct rtnl_link_stats64 *s,
                if (what)
                        close_json_object();
        } else {
+               uint64_t zero64 = 0;
+
                size_columns(cols, ARRAY_SIZE(cols),
                             s->rx_bytes, s->rx_packets, s->rx_errors,
                             s->rx_dropped, s->rx_missed_errors,
-                            s->multicast, s->rx_compressed);
+                            s->multicast, s->rx_compressed, zero64);
                if (show_stats > 1)
                        size_columns(cols, ARRAY_SIZE(cols), 0,
                                     s->rx_length_errors, s->rx_crc_errors,
@@ -788,7 +790,7 @@ void print_stats64(FILE *fp, struct rtnl_link_stats64 *s,
                size_columns(cols, ARRAY_SIZE(cols),
                             s->tx_bytes, s->tx_packets, s->tx_errors,
                             s->tx_dropped, s->tx_carrier_errors,
-                            s->collisions, s->tx_compressed);
+                            s->collisions, s->tx_compressed, zero64);
                if (show_stats > 1) {
                        uint64_t cc = carrier_changes ?
                                      rta_getattr_u32(carrier_changes) : 0;
@@ -796,7 +798,7 @@ void print_stats64(FILE *fp, struct rtnl_link_stats64 *s,
                        size_columns(cols, ARRAY_SIZE(cols), 0, 0,
                                     s->tx_aborted_errors, s->tx_fifo_errors,
                                     s->tx_window_errors,
-                                    s->tx_heartbeat_errors, cc);
+                                    s->tx_heartbeat_errors, cc, zero64);
                }
 
                /* RX stats */