chroot() can fail and its return value should be checked against so propagate sysupgrade_exec_upgraded() return value to its caller.
Fixes: 63789e51ed91 ("init: add support for sysupgrades triggered from preinit") Signed-off-by: Florian Fainelli <f.faine...@gmail.com> --- system.c | 7 +++---- sysupgrade.c | 10 ++++++---- sysupgrade.h | 2 +- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/system.c b/system.c index 6cd2b624b3be..59ddc214e6f6 100644 --- a/system.c +++ b/system.c @@ -400,10 +400,9 @@ static int sysupgrade(struct ubus_context *ctx, struct ubus_object *obj, if (!tb[SYSUPGRADE_PATH] || !tb[SYSUPGRADE_PREFIX]) return UBUS_STATUS_INVALID_ARGUMENT; - sysupgrade_exec_upgraded(blobmsg_get_string(tb[SYSUPGRADE_PREFIX]), - blobmsg_get_string(tb[SYSUPGRADE_PATH]), - tb[SYSUPGRADE_COMMAND] ? blobmsg_get_string(tb[SYSUPGRADE_COMMAND]) : NULL); - return 0; + return sysupgrade_exec_upgraded(blobmsg_get_string(tb[SYSUPGRADE_PREFIX]), + blobmsg_get_string(tb[SYSUPGRADE_PATH]), + tb[SYSUPGRADE_COMMAND] ? blobmsg_get_string(tb[SYSUPGRADE_COMMAND]) : NULL); } static void diff --git a/sysupgrade.c b/sysupgrade.c index 30f1836135c9..13ba4050527d 100644 --- a/sysupgrade.c +++ b/sysupgrade.c @@ -22,14 +22,16 @@ #include <unistd.h> -void sysupgrade_exec_upgraded(const char *prefix, char *path, char *command) +int sysupgrade_exec_upgraded(const char *prefix, char *path, char *command) { char *wdt_fd = watchdog_fd(); char *argv[] = { "/sbin/upgraded", NULL, NULL, NULL}; + int ret; - if (chroot(prefix)) { + ret = chroot(prefix); + if (ret < 0) { fprintf(stderr, "Failed to chroot for upgraded exec.\n"); - return; + return ret; } argv[1] = path; @@ -45,5 +47,5 @@ void sysupgrade_exec_upgraded(const char *prefix, char *path, char *command) fprintf(stderr, "Failed to exec upgraded.\n"); unsetenv("WDTFD"); watchdog_set_cloexec(true); - chroot("."); + return chroot("."); } diff --git a/sysupgrade.h b/sysupgrade.h index 8c09fc99d191..3887f71a00a6 100644 --- a/sysupgrade.h +++ b/sysupgrade.h @@ -15,7 +15,7 @@ #define __PROCD_SYSUPGRADE_H -void sysupgrade_exec_upgraded(const char *prefix, char *path, char *command); +int sysupgrade_exec_upgraded(const char *prefix, char *path, char *command); #endif -- 2.11.0 _______________________________________________ Lede-dev mailing list Lede-dev@lists.infradead.org http://lists.infradead.org/mailman/listinfo/lede-dev