summaryrefslogtreecommitdiff
path: root/cmd
diff options
context:
space:
mode:
authorTom Rini <trini@konsulko.com>2017-10-11 15:34:33 -0400
committerTom Rini <trini@konsulko.com>2017-10-16 09:42:51 -0400
commit59ee8f83b6e77550d5697fced4899e9b5173981f (patch)
tree1b1fa301031d679bedac1dd69d9441c08008fae5 /cmd
parentecc9709fc12cc8e1a07b062d07cb8a5b296888d7 (diff)
cmd/pxe.c: Rework bootargs construction to clarify string checks
As the code currently stands, we first check that the length of the given command line, along with ip_str/mac_str along with an additional 1 for the NULL termination will fit within the buffer we have, and if not, we return an error. The way this code was originally written however left Coverity "unhappy" due to using strcat rather than strncat. Switching this to strncat however causes clang to be unhappy that we aren't enforcing the "1" portion within strncat. Rather than further re-work the code to include a "- 1" in this case as well, make the strcat code only be done within the else side of the length test. This keeps both clang and Coverity happy. Fixes: 48ee0a87bc46 ("cmd/pxe.c: Rework initrd and bootargs handling slightly") Signed-off-by: Tom Rini <trini@konsulko.com>
Diffstat (limited to 'cmd')
-rw-r--r--cmd/pxe.c19
1 files changed, 10 insertions, 9 deletions
diff --git a/cmd/pxe.c b/cmd/pxe.c
index a62cbe192a..7043ad11fd 100644
--- a/cmd/pxe.c
+++ b/cmd/pxe.c
@@ -686,16 +686,17 @@ static int label_boot(cmd_tbl_t *cmdtp, struct pxe_label *label)
strlen(ip_str), strlen(mac_str),
sizeof(bootargs));
return 1;
+ } else {
+ if (label->append)
+ strncpy(bootargs, label->append,
+ sizeof(bootargs));
+ strcat(bootargs, ip_str);
+ strcat(bootargs, mac_str);
+
+ cli_simple_process_macros(bootargs, finalbootargs);
+ env_set("bootargs", finalbootargs);
+ printf("append: %s\n", finalbootargs);
}
-
- if (label->append)
- strncpy(bootargs, label->append, sizeof(bootargs));
- strncat(bootargs, ip_str, sizeof(bootargs) - strlen(bootargs));
- strncat(bootargs, mac_str, sizeof(bootargs) - strlen(bootargs));
-
- cli_simple_process_macros(bootargs, finalbootargs);
- env_set("bootargs", finalbootargs);
- printf("append: %s\n", finalbootargs);
}
bootm_argv[1] = env_get("kernel_addr_r");