Skip to content
Snippets Groups Projects
Commit 1688f847 authored by Tom Rini's avatar Tom Rini
Browse files

Merge tag 'u-boot-dfu-20241219' of https://source.denx.de/u-boot/custodians/u-boot-dfu

CI: https://source.denx.de/u-boot/custodians/u-boot-dfu/-/pipelines/23951

Android:
- Fix kcmdline_extra support when parsing boot image
- Fix memory leak when after bootargs concatenation
- Fix length calculation when merging bootargs, cmdline and kcmdline
parents 69bd8356 9e5fad0f
No related branches found
No related tags found
No related merge requests found
...@@ -287,41 +287,45 @@ int android_image_get_kernel(const void *hdr, ...@@ -287,41 +287,45 @@ int android_image_get_kernel(const void *hdr,
kernel_addr, DIV_ROUND_UP(img_data.kernel_size, 1024)); kernel_addr, DIV_ROUND_UP(img_data.kernel_size, 1024));
int len = 0; int len = 0;
char *bootargs = env_get("bootargs");
if (bootargs)
len += strlen(bootargs);
if (*img_data.kcmdline) { if (*img_data.kcmdline) {
printf("Kernel command line: %s\n", img_data.kcmdline); printf("Kernel command line: %s\n", img_data.kcmdline);
len += strlen(img_data.kcmdline); len += strlen(img_data.kcmdline) + (len ? 1 : 0); /* +1 for extra space */
} }
if (img_data.kcmdline_extra) { if (*img_data.kcmdline_extra) {
printf("Kernel extra command line: %s\n", img_data.kcmdline_extra); printf("Kernel extra command line: %s\n", img_data.kcmdline_extra);
len += strlen(img_data.kcmdline_extra); len += strlen(img_data.kcmdline_extra) + (len ? 1 : 0); /* +1 for extra space */
} }
char *bootargs = env_get("bootargs"); char *newbootargs = malloc(len + 1); /* +1 for the '\0' */
if (bootargs)
len += strlen(bootargs);
char *newbootargs = malloc(len + 2);
if (!newbootargs) { if (!newbootargs) {
puts("Error: malloc in android_image_get_kernel failed!\n"); puts("Error: malloc in android_image_get_kernel failed!\n");
return -ENOMEM; return -ENOMEM;
} }
*newbootargs = '\0'; *newbootargs = '\0'; /* set to Null in case no components below are present */
if (bootargs) { if (bootargs)
strcpy(newbootargs, bootargs); strcpy(newbootargs, bootargs);
strcat(newbootargs, " ");
}
if (*img_data.kcmdline) if (*img_data.kcmdline) {
if (*newbootargs) /* If there is something in newbootargs, a space is needed */
strcat(newbootargs, " ");
strcat(newbootargs, img_data.kcmdline); strcat(newbootargs, img_data.kcmdline);
}
if (img_data.kcmdline_extra) { if (*img_data.kcmdline_extra) {
strcat(newbootargs, " "); if (*newbootargs) /* If there is something in newbootargs, a space is needed */
strcat(newbootargs, " ");
strcat(newbootargs, img_data.kcmdline_extra); strcat(newbootargs, img_data.kcmdline_extra);
} }
env_set("bootargs", newbootargs); env_set("bootargs", newbootargs);
free(newbootargs);
if (os_data) { if (os_data) {
if (image_get_magic(ihdr) == IH_MAGIC) { if (image_get_magic(ihdr) == IH_MAGIC) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment