Rework the bootargs concatenation allocating more accurately
the length that is needed.
Do not forget an extra byte for the null termination byte as,
in some cases, the allocation was 1 byte short.

Fixes: 86f4695b ("image: Fix Android boot image support")
Signed-off-by: Nicolas Belin <[email protected]>
---
 boot/image-android.c | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/boot/image-android.c b/boot/image-android.c
index 
362a5c7435a3a8bcf7b674b96e31069a91a892b5..ed72a5c30424a453c1800bc61edbe8f33b31b341
 100644
--- a/boot/image-android.c
+++ b/boot/image-android.c
@@ -289,7 +289,7 @@ int android_image_get_kernel(const void *hdr,
        int len = 0;
        if (*img_data.kcmdline) {
                printf("Kernel command line: %s\n", img_data.kcmdline);
-               len += strlen(img_data.kcmdline);
+               len += strlen(img_data.kcmdline) + 1; /* Extra space character 
needed */
        }
 
        if (*img_data.kcmdline_extra) {
@@ -299,28 +299,28 @@ int android_image_get_kernel(const void *hdr,
 
        char *bootargs = env_get("bootargs");
        if (bootargs)
-               len += strlen(bootargs);
+               len += strlen(bootargs) + 1; /* Extra space character needed */
 
-       char *newbootargs = malloc(len + 2);
+       char *newbootargs = malloc(len + 1); /* +1 for the '\0' */
        if (!newbootargs) {
                puts("Error: malloc in android_image_get_kernel failed!\n");
                return -ENOMEM;
        }
-       *newbootargs = '\0';
+       *newbootargs = '\0'; /* set to NULL in case no components below are 
present */
 
        if (bootargs) {
                strcpy(newbootargs, bootargs);
                strcat(newbootargs, " ");
        }
 
-       if (*img_data.kcmdline)
+       if (*img_data.kcmdline) {
                strcat(newbootargs, img_data.kcmdline);
-
-       if (*img_data.kcmdline_extra) {
                strcat(newbootargs, " ");
-               strcat(newbootargs, img_data.kcmdline_extra);
        }
 
+       if (*img_data.kcmdline_extra)
+               strcat(newbootargs, img_data.kcmdline_extra);
+
        env_set("bootargs", newbootargs);
        free(newbootargs);
 

-- 
2.34.1

Reply via email to