mirror of
https://codeberg.org/libreboot/lbmk.git
synced 2026-07-16 23:08:49 +02:00
util/nvmutil: unified cmd validity check
Signed-off-by: Leah Rowe <leah@libreboot.org>
This commit is contained in:
+18
-7
@@ -34,6 +34,7 @@ static void set_cmd_args(int argc, char *argv[]);
|
|||||||
static size_t conv_argv_part_num(const char *part_str);
|
static size_t conv_argv_part_num(const char *part_str);
|
||||||
static void run_cmd(size_t c);
|
static void run_cmd(size_t c);
|
||||||
static void check_command_num(size_t c);
|
static void check_command_num(size_t c);
|
||||||
|
static uint8_t valid_command(size_t c);
|
||||||
static void set_io_flags(int argc, char *argv[]);
|
static void set_io_flags(int argc, char *argv[]);
|
||||||
static void open_gbe_file(void);
|
static void open_gbe_file(void);
|
||||||
#ifndef HAVE_ARC4RANDOM_BUF
|
#ifndef HAVE_ARC4RANDOM_BUF
|
||||||
@@ -204,11 +205,12 @@ static const struct commands command[] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
#define MAX_CMD_LEN 50
|
#define MAX_CMD_LEN 50
|
||||||
|
#define CMD_NULL items(command)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Index in command[], will be set later
|
* Index in command[], will be set later
|
||||||
*/
|
*/
|
||||||
static size_t cmd_index = items(command);
|
static size_t cmd_index = CMD_NULL;
|
||||||
|
|
||||||
int
|
int
|
||||||
main(int argc, char *argv[])
|
main(int argc, char *argv[])
|
||||||
@@ -321,7 +323,7 @@ sanitize_command_list(void)
|
|||||||
{
|
{
|
||||||
size_t c;
|
size_t c;
|
||||||
|
|
||||||
for (c = 0; c < items(command); c++)
|
for (c = 0; valid_command(c); c++)
|
||||||
sanitize_command_index(c);
|
sanitize_command_index(c);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -356,7 +358,7 @@ sanitize_command_index(size_t c)
|
|||||||
static void
|
static void
|
||||||
set_cmd(int argc, char *argv[])
|
set_cmd(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
for (cmd_index = 0; cmd_index < items(command); cmd_index++) {
|
for (cmd_index = 0; valid_command(cmd_index); cmd_index++) {
|
||||||
if (argc < 3)
|
if (argc < 3)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -381,7 +383,7 @@ set_cmd_args(int argc, char *argv[])
|
|||||||
* 4th arg e.g.: ./nvmutil gbe.bin setmac 00:xx:11:22:xx:xx
|
* 4th arg e.g.: ./nvmutil gbe.bin setmac 00:xx:11:22:xx:xx
|
||||||
*/
|
*/
|
||||||
mac_str = argv[3];
|
mac_str = argv[3];
|
||||||
} else if (cmd_index >= items(command) && argc >= 3) {
|
} else if (!valid_command(cmd_index) && argc >= 3) {
|
||||||
/*
|
/*
|
||||||
* Example: ./nvmutil gbe.bin xx:1f:16:xx:xx:xx
|
* Example: ./nvmutil gbe.bin xx:1f:16:xx:xx:xx
|
||||||
* Equivalent ./nvmutil gbe.bin setmac xx:1f:16:xx:xx:xx
|
* Equivalent ./nvmutil gbe.bin setmac xx:1f:16:xx:xx:xx
|
||||||
@@ -395,7 +397,7 @@ set_cmd_args(int argc, char *argv[])
|
|||||||
*/
|
*/
|
||||||
mac_str = rmac;
|
mac_str = rmac;
|
||||||
cmd_index = CMD_SETMAC;
|
cmd_index = CMD_SETMAC;
|
||||||
} else if (cmd_index < items(command) && argc > 3) {
|
} else if (valid_command(cmd_index) && argc >= 4) {
|
||||||
/*
|
/*
|
||||||
* User-supplied partnum.
|
* User-supplied partnum.
|
||||||
* Example: ./nvmutil gbe.bin copy 0
|
* Example: ./nvmutil gbe.bin copy 0
|
||||||
@@ -416,7 +418,7 @@ set_cmd_args(int argc, char *argv[])
|
|||||||
* MAC address is used.
|
* MAC address is used.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (cmd_index >= items(command))
|
if (!valid_command(cmd_index))
|
||||||
err(EINVAL, "Unhandled command error");
|
err(EINVAL, "Unhandled command error");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -451,12 +453,21 @@ run_cmd(size_t c)
|
|||||||
static void
|
static void
|
||||||
check_command_num(size_t c)
|
check_command_num(size_t c)
|
||||||
{
|
{
|
||||||
if (c >= items(command))
|
if (!valid_command(c))
|
||||||
err(ECANCELED, "Invalid run_cmd arg: %zu", c);
|
err(ECANCELED, "Invalid run_cmd arg: %zu", c);
|
||||||
|
}
|
||||||
|
|
||||||
|
static uint8_t
|
||||||
|
valid_command(size_t c)
|
||||||
|
{
|
||||||
|
if (c >= items(command))
|
||||||
|
return 0;
|
||||||
|
|
||||||
if (c != command[c].chk)
|
if (c != command[c].chk)
|
||||||
err(ECANCELED, "Invalid cmd chk value (%zu) vs arg: %zu",
|
err(ECANCELED, "Invalid cmd chk value (%zu) vs arg: %zu",
|
||||||
command[c].chk, c);
|
command[c].chk, c);
|
||||||
|
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|||||||
Reference in New Issue
Block a user