The exit_now flag is polled by worker_main() on one lcore and set by
main() on another, but is a plain int so the load can be hoisted out
of the loop. Make it volatile.

Also check the cmdline_stdin_new() result before using it.

Found by gcc -fanalyzer.

Fixes: bda68ab9d1e7 ("examples/ethtool: add user-space ethtool sample 
application")
Cc: [email protected]

Signed-off-by: Stephen Hemminger <[email protected]>
---
 examples/ethtool/ethtool-app/ethapp.c | 5 +++++
 examples/ethtool/ethtool-app/main.c   | 2 +-
 2 files changed, 6 insertions(+), 1 deletion(-)

diff --git a/examples/ethtool/ethtool-app/ethapp.c 
b/examples/ethtool/ethtool-app/ethapp.c
index 489cd4f515..68c8a29b96 100644
--- a/examples/ethtool/ethtool-app/ethapp.c
+++ b/examples/ethtool/ethtool-app/ethapp.c
@@ -4,6 +4,8 @@
 
 #include <stdlib.h>
 
+#include <rte_debug.h>
+
 #include <cmdline_parse.h>
 #include <cmdline_parse_num.h>
 #include <cmdline_parse_string.h>
@@ -914,6 +916,9 @@ void ethapp_main(void)
        struct cmdline *ctx_cmdline;
 
        ctx_cmdline = cmdline_stdin_new(list_prompt_commands, "EthApp> ");
+       if (ctx_cmdline == NULL)
+               rte_panic("Cannot create cmdline instance\n");
+
        cmdline_interact(ctx_cmdline);
        cmdline_stdin_exit(ctx_cmdline);
 }
diff --git a/examples/ethtool/ethtool-app/main.c 
b/examples/ethtool/ethtool-app/main.c
index 6545eb322d..ddd256cd7b 100644
--- a/examples/ethtool/ethtool-app/main.c
+++ b/examples/ethtool/ethtool-app/main.c
@@ -44,7 +44,7 @@ struct app_port {
 struct app_config {
        struct app_port ports[MAX_PORTS];
        int cnt_ports;
-       int exit_now;
+       volatile int exit_now;
 };
 
 
-- 
2.53.0

Reply via email to