UPSTREAM: 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")
Change-Id: I6a3d3ea54d6b7e1f3c2aed200b2f706f42d570d4
Signed-off-by: Tom Rini <trini@konsulko.com>
Signed-off-by: Kever Yang <kever.yang@rock-chips.com>
(cherry picked from commit 59ee8f83b6e77550d5697fced4899e9b5173981f)
This commit is contained in:
Tom Rini 2017-10-11 15:34:33 -04:00 committed by Kever Yang
parent 96f111c8b8
commit c9bf1d5a23
1 changed files with 10 additions and 9 deletions

View File

@ -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");