>From 81def5ff65881ce6cb4ccdd23a34da8a2870568f Mon Sep 17 00:00:00 2001
From: Mikhail Dmitrichenko <[email protected]>
Date: Fri, 3 Apr 2026 14:19:13 +0300
Subject: [PATCH] netdev-dpdk: Fix possible memory leak when configuring
 rx-steering

VLOG_WARN_BUF() allocates a new string with xasprintf() every time it is
called and overwrites *errp without freeing the previous value. This can
lead to a memory leak if multiple warnings are emitted or if a later
hard error in netdev_dpdk_set_config() also writes
to errp.

The three cases in dpdk_set_rx_steer_config() are not fatal errors:
- unsupported rx-steering value
- rss+lacp on non-ethernet port
- rss+lacp together with hw-offload

In all cases program simply log a warning and fall back to default RSS
steering. Configuration continues normally (err remains 0 and execution
flow do not goto out).

Therefore change them to plain VLOG_WARN(). As a result the 'errp'
parameter becomes unused and is removed from the function signature and
the call site in netdev_dpdk_set_config().

This makes the code cleaner and consistent with the rest of netdev-dpdk.

Found by Linux Verification Center (linuxtesting.org) with SVACE.

Fixes: fc06ea ("netdev-dpdk: Add custom rx-steering configuration.")
Signed-off-by: Mikhail Dmitrichenko <[email protected]>
---
 lib/netdev-dpdk.c | 22 +++++++++++-----------
 1 file changed, 11 insertions(+), 11 deletions(-)

diff --git a/lib/netdev-dpdk.c b/lib/netdev-dpdk.c
index 54959ff0d..9fbb204ef 100644
--- a/lib/netdev-dpdk.c
+++ b/lib/netdev-dpdk.c
@@ -2251,7 +2251,7 @@ dpdk_process_queue_size(struct netdev *netdev,
const struct smap *args,

 static void
 dpdk_set_rx_steer_config(struct netdev *netdev, struct netdev_dpdk *dev,
-                         const struct smap *args, char **errp)
+                         const struct smap *args)
 {
     const char *arg = smap_get_def(args, "rx-steering", "rss");
     uint64_t flags = 0;
@@ -2259,22 +2259,22 @@ dpdk_set_rx_steer_config(struct netdev
*netdev, struct netdev_dpdk *dev,
     if (!strcmp(arg, "rss+lacp")) {
         flags = DPDK_RX_STEER_LACP;
     } else if (strcmp(arg, "rss")) {
-        VLOG_WARN_BUF(errp, "%s: options:rx-steering "
-                      "unsupported parameter value '%s'",
-                      netdev_get_name(netdev), arg);
+        VLOG_WARN("%s: options:rx-steering "
+                  "unsupported parameter value '%s'",
+                  netdev_get_name(netdev), arg);
     }

     if (flags && dev->type != DPDK_DEV_ETH) {
-        VLOG_WARN_BUF(errp, "%s: options:rx-steering "
-                      "is only supported on ethernet ports",
-                      netdev_get_name(netdev));
+        VLOG_WARN("%s: options:rx-steering "
+                  "is only supported on ethernet ports",
+                  netdev_get_name(netdev));
         flags = 0;
     }

     if (flags && dpif_offload_enabled()) {
-        VLOG_WARN_BUF(errp, "%s: options:rx-steering "
-                      "is incompatible with hw-offload",
-                      netdev_get_name(netdev));
+        VLOG_WARN("%s: options:rx-steering "
+                  "is incompatible with hw-offload",
+                  netdev_get_name(netdev));
         flags = 0;
     }

@@ -2304,7 +2304,7 @@ netdev_dpdk_set_config(struct netdev *netdev,
const struct smap *args,
     ovs_mutex_lock(&dpdk_mutex);
     ovs_mutex_lock(&dev->mutex);

-    dpdk_set_rx_steer_config(netdev, dev, args, errp);
+    dpdk_set_rx_steer_config(netdev, dev, args);

     dpdk_set_rxq_config(dev, args);

-- 
2.39.2
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to