diff options
| author | Rafał Miłecki | 2019-09-11 08:34:41 +0000 |
|---|---|---|
| committer | Rafał Miłecki | 2019-09-16 04:49:16 +0000 |
| commit | 2710c65ae1bdaa33b36a0a257ebe35771a48b88f (patch) | |
| tree | 065c29edaf5ff5e55799ca95100e09ac5b981978 | |
| parent | b8238df0fb9585b5ec9acbc0f4285dad953f2192 (diff) | |
| download | procd-2710c65ae1bdaa33b36a0a257ebe35771a48b88f.tar.gz | |
system: refuse sysupgrade with backup if it's unsupported
Don't allow it if validation methods marked firmware as not supporting a
backup.
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
| -rw-r--r-- | system.c | 8 |
1 files changed, 7 insertions, 1 deletions
@@ -515,15 +515,17 @@ static int sysupgrade(struct ubus_context *ctx, struct ubus_object *obj, enum { VALIDATION_VALID, VALIDATION_FORCEABLE, + VALIDATION_ALLOW_BACKUP, __VALIDATION_MAX }; static const struct blobmsg_policy validation_policy[__VALIDATION_MAX] = { [VALIDATION_VALID] = { .name = "valid", .type = BLOBMSG_TYPE_BOOL }, [VALIDATION_FORCEABLE] = { .name = "forceable", .type = BLOBMSG_TYPE_BOOL }, + [VALIDATION_ALLOW_BACKUP] = { .name = "allow_backup", .type = BLOBMSG_TYPE_BOOL }, }; struct blob_attr *validation[__VALIDATION_MAX]; struct blob_attr *tb[__SYSUPGRADE_MAX]; - bool valid, forceable; + bool valid, forceable, allow_backup; if (!msg) return UBUS_STATUS_INVALID_ARGUMENT; @@ -539,6 +541,7 @@ static int sysupgrade(struct ubus_context *ctx, struct ubus_object *obj, valid = validation[VALIDATION_VALID] && blobmsg_get_bool(validation[VALIDATION_VALID]); forceable = validation[VALIDATION_FORCEABLE] && blobmsg_get_bool(validation[VALIDATION_FORCEABLE]); + allow_backup = validation[VALIDATION_ALLOW_BACKUP] && blobmsg_get_bool(validation[VALIDATION_ALLOW_BACKUP]); if (!valid) { if (!forceable) { @@ -548,6 +551,9 @@ static int sysupgrade(struct ubus_context *ctx, struct ubus_object *obj, fprintf(stderr, "Firmware image is invalid\n"); return UBUS_STATUS_NOT_SUPPORTED; } + } else if (!allow_backup && tb[SYSUPGRADE_BACKUP]) { + fprintf(stderr, "Firmware image doesn't allow preserving a backup\n"); + return UBUS_STATUS_NOT_SUPPORTED; } sysupgrade_exec_upgraded(blobmsg_get_string(tb[SYSUPGRADE_PREFIX]), |