mirror of
https://source.denx.de/u-boot/u-boot.git
synced 2026-06-13 15:03:58 +03:00
bootstd: Fix memleak on errors in bootmeth_setup_iter_order()
Free memory allocated for 'order' (array of bootmeths) on error paths in bootmeth_setup_iter_order() function. Fixes:c627cfc14c("bootstd: Allow scanning for global bootmeths separately") Fixes:10d16faa43("bootstd: Detect empty bootmeth") Signed-off-by: Sam Protsenko <semen.protsenko@linaro.org> Reviewed-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
@@ -135,8 +135,10 @@ int bootmeth_setup_iter_order(struct bootflow_iter *iter, bool include_global)
|
||||
* We don't support skipping global bootmeths. Instead, the user
|
||||
* should omit them from the ordering
|
||||
*/
|
||||
if (!include_global)
|
||||
return log_msg_ret("glob", -EPERM);
|
||||
if (!include_global) {
|
||||
ret = log_msg_ret("glob", -EPERM);
|
||||
goto err_order;
|
||||
}
|
||||
memcpy(order, std->bootmeth_order,
|
||||
count * sizeof(struct bootmeth *));
|
||||
|
||||
@@ -190,8 +192,10 @@ int bootmeth_setup_iter_order(struct bootflow_iter *iter, bool include_global)
|
||||
}
|
||||
count = upto;
|
||||
}
|
||||
if (!count)
|
||||
return log_msg_ret("count2", -ENOENT);
|
||||
if (!count) {
|
||||
ret = log_msg_ret("count2", -ENOENT);
|
||||
goto err_order;
|
||||
}
|
||||
|
||||
if (IS_ENABLED(CONFIG_BOOTMETH_GLOBAL) && include_global &&
|
||||
iter->first_glob_method != -1 && iter->first_glob_method != count) {
|
||||
@@ -202,6 +206,10 @@ int bootmeth_setup_iter_order(struct bootflow_iter *iter, bool include_global)
|
||||
iter->num_methods = count;
|
||||
|
||||
return 0;
|
||||
|
||||
err_order:
|
||||
free(order);
|
||||
return ret;
|
||||
}
|
||||
|
||||
int bootmeth_set_order(const char *order_str)
|
||||
|
||||
Reference in New Issue
Block a user