Skip to content

Commit 30e1d6f

Browse files
committed
drivers: mdio: shell: Fix argument count
Need to have correct argument count to avoid crash. Signed-off-by: Cla Mattia Galliard <cla-mattia.galliard@zuehlke.com>
1 parent 2a88cb5 commit 30e1d6f

File tree

1 file changed

+13
-8
lines changed

1 file changed

+13
-8
lines changed

drivers/mdio/mdio_shell.c

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,13 @@ static void device_name_get(size_t idx, struct shell_static_entry *entry)
3232

3333
SHELL_DYNAMIC_CMD_CREATE(dsub_device_name, device_name_get);
3434

35-
static int parse_device_arg(const struct shell *sh, char **argv, const struct device **dev)
35+
static int parse_device_arg(const struct shell *sh, size_t argc,
36+
char **argv, const struct device **dev)
3637
{
38+
if (argc < 2) {
39+
shell_error(sh, "not enough arguments");
40+
return -EINVAL;
41+
}
3742
*dev = shell_device_get_binding(argv[1]);
3843
if (!*dev) {
3944
shell_error(sh, "device %s not found", argv[1]);
@@ -55,12 +60,12 @@ static int cmd_mdio_scan(const struct shell *sh, size_t argc, char **argv)
5560
uint16_t reg_addr;
5661
int ret;
5762

58-
ret = parse_device_arg(sh, argv, &dev);
63+
ret = parse_device_arg(sh, argc, argv, &dev);
5964
if (ret < 0) {
6065
return ret;
6166
}
6267

63-
if (argc >= 2) {
68+
if (argc >= 3) {
6469
reg_addr = strtol(argv[2], NULL, 16);
6570
} else {
6671
reg_addr = 0;
@@ -98,7 +103,7 @@ static int cmd_mdio_write(const struct shell *sh, size_t argc, char **argv)
98103
uint16_t port_addr;
99104
int ret;
100105

101-
ret = parse_device_arg(sh, argv, &dev);
106+
ret = parse_device_arg(sh, argc, argv, &dev);
102107
if (ret < 0) {
103108
return ret;
104109
}
@@ -130,7 +135,7 @@ static int cmd_mdio_read(const struct shell *sh, size_t argc, char **argv)
130135
uint16_t port_addr;
131136
int ret;
132137

133-
ret = parse_device_arg(sh, argv, &dev);
138+
ret = parse_device_arg(sh, argc, argv, &dev);
134139
if (ret < 0) {
135140
return ret;
136141
}
@@ -164,7 +169,7 @@ static int cmd_mdio_write_45(const struct shell *sh, size_t argc, char **argv)
164169
uint8_t port_addr;
165170
int ret;
166171

167-
ret = parse_device_arg(sh, argv, &dev);
172+
ret = parse_device_arg(sh, argc, argv, &dev);
168173
if (ret < 0) {
169174
return ret;
170175
}
@@ -198,7 +203,7 @@ static int cmd_mdio_read_c45(const struct shell *sh, size_t argc, char **argv)
198203
uint8_t port_addr;
199204
int ret;
200205

201-
ret = parse_device_arg(sh, argv, &dev);
206+
ret = parse_device_arg(sh, argc, argv, &dev);
202207
if (ret < 0) {
203208
return ret;
204209
}
@@ -226,7 +231,7 @@ static int cmd_mdio_read_c45(const struct shell *sh, size_t argc, char **argv)
226231
SHELL_STATIC_SUBCMD_SET_CREATE(sub_mdio_cmds,
227232
SHELL_CMD_ARG(scan, &dsub_device_name,
228233
"Scan MDIO bus for devices: scan <device> [<reg_addr>]",
229-
cmd_mdio_scan, 1, 1),
234+
cmd_mdio_scan, 2, 1),
230235
SHELL_CMD_ARG(read, &dsub_device_name,
231236
"Read from MDIO device: read <device> <phy_addr> <reg_addr>",
232237
cmd_mdio_read, 4, 0),

0 commit comments

Comments
 (0)