From 2cf1d1bed85ac70f93bc3d0aa311851b2adaec42 Mon Sep 17 00:00:00 2001 From: Leah Rowe Date: Mon, 9 Mar 2026 03:03:33 +0000 Subject: util/nvmutil: remove MAC address short-commands only allow the long form: setmac [MAC] specifying gbe.bin just shows the help/usage now. this is a safety feature, so that someone doesn't accidentally write the gbe file. we want it to be that the user specifically requested setmac. setmac with mac address as the 3rd argument is also disabled. this is done as part of a general simplification and safety improvement to nvmutil. Signed-off-by: Leah Rowe --- util/nvmutil/nvmutil.c | 78 ++++++++++++++++++-------------------------------- 1 file changed, 28 insertions(+), 50 deletions(-) diff --git a/util/nvmutil/nvmutil.c b/util/nvmutil/nvmutil.c index 522bc82b..0844af23 100644 --- a/util/nvmutil/nvmutil.c +++ b/util/nvmutil/nvmutil.c @@ -295,7 +295,7 @@ int main(int argc, char *argv[]) { argv0 = argv[0]; - if (argc < 2) + if (argc < 3) usage(1); fname = argv[1]; @@ -469,19 +469,18 @@ check_enum_bin(size_t a, const char *a_name, static void set_cmd(int argc, char *argv[]) { + const char *cmd_str; + for (cmd_index = 0; valid_command(cmd_index); cmd_index++) { - if (argc < 3) - break; + cmd_str = command[cmd_index].str; - if (xstrxcmp(argv[2], command[cmd_index].str, - MAX_CMD_LEN) != 0) + if (xstrxcmp(argv[2], cmd_str, MAX_CMD_LEN) != 0) continue; - - if (argc >= command[cmd_index].argc) + else if (argc >= command[cmd_index].argc) return; - err(EINVAL, "Too few args: command '%s'", - command[cmd_index].str); + fprintf(stderr, "Too few args on command '%s'", cmd_str); + break; } cmd_index = CMD_NULL; @@ -490,45 +489,25 @@ set_cmd(int argc, char *argv[]) static void set_cmd_args(int argc, char *argv[]) { - if (cmd_index == CMD_SETMAC && argc >= 4) { - /* - * 4th arg e.g.: ./nvmutil gbe.bin setmac 00:xx:11:22:xx:xx - */ - mac_str = argv[3]; - } else if (!valid_command(cmd_index) && argc >= 3) { - /* - * Example: ./nvmutil gbe.bin xx:1f:16:xx:xx:xx - * Equivalent ./nvmutil gbe.bin setmac xx:1f:16:xx:xx:xx - */ - mac_str = argv[2]; - cmd_index = CMD_SETMAC; - } else if (argc == 2) { - /* - * No extra args: ./nvmutil gbe.bin - * Equivalent: ./nvmutil gbe.bin setmac xx:xx:xx:xx:xx:xx - */ - mac_str = rmac; - cmd_index = CMD_SETMAC; - } else if (valid_command(cmd_index) && argc >= 4) { - if (command[cmd_index].arg_part) { - /* - * User-supplied partnum. - * Example: ./nvmutil gbe.bin copy 0 - */ - part = conv_argv_part_num(argv[3]); - } else { - err(ECANCELED, "Bad command: %s %s", - argv[2], argv[3]); - } - } else if (valid_command(cmd_index) && argc >= 3) { - if (cmd_index == CMD_SETMAC) - mac_str = rmac; - } + uint8_t arg_part; - if (!valid_command(cmd_index)) { - usage(0); - err(EINVAL, "Unhandled command error"); - } + if (!valid_command(cmd_index) || argc < 3) + usage(1); + + arg_part = command[cmd_index].arg_part; + + /* Maintainer bugs */ + if (arg_part && argc < 4) + err(ECANCELED, + "arg_part set for command that needs argc4"); + if (arg_part && cmd_index == CMD_SETMAC) + err(ECANCELED, + "arg_part set on CMD_SETMAC"); + + if (cmd_index == CMD_SETMAC) + mac_str = argc >= 4 ? argv[3] : rmac; + else if (arg_part) + part = conv_argv_part_num(argv[3]); } static size_t @@ -1321,12 +1300,11 @@ usage(uint8_t usage_exit) "Modify Intel GbE NVM images e.g. set MAC\n" "USAGE:\n" "\t%s FILE dump\n" - "\t%s FILE # same as setmac without [MAC]\n" "\t%s FILE setmac [MAC]\n" "\t%s FILE swap\n" "\t%s FILE copy 0|1\n", - util, util, util, util, util); + util, util, util, util); if (usage_exit) - err(ECANCELED, "Too few arguments"); + err(EINVAL, "Too few arguments"); } -- cgit v1.2.1