diff --git a/dmentry.c b/dmentry.c index b8c6d4d6..d49f7ae1 100644 --- a/dmentry.c +++ b/dmentry.c @@ -274,7 +274,10 @@ int dm_entry_apply(struct dmctx *ctx, int cmd, char *arg1, char *arg2) ctx->in_value = n->value ? n->value : ""; ctx->stop = false; fault = dm_entry_set_value(ctx); - if (fault) break; + if (fault) { + add_list_fault_param(ctx, ctx->in_param, usp_fault_map(fault)); + break; + } } if (!fault) { dmuci_set_value("cwmp", "acs", "ParameterKey", arg1 ? arg1 : ""); diff --git a/dmtree/tr181/deviceinfo.c b/dmtree/tr181/deviceinfo.c index 080e7c68..c66581ad 100644 --- a/dmtree/tr181/deviceinfo.c +++ b/dmtree/tr181/deviceinfo.c @@ -144,9 +144,14 @@ static int set_device_boot_fwimage(char *refparam, struct dmctx *ctx, void *data adm_entry_get_linker_value(ctx, value, &linker); if (linker && *linker) { char *bank_id = strchr(linker, ':'); - if (bank_id) - dmubus_call_set("fwbank", "set_bootbank", UBUS_ARGS{{"bank", bank_id+1, Integer}}, 1); - dmfree(linker); + if (bank_id) { + json_object *res = NULL; + + dmubus_call("fwbank", "set_bootbank", UBUS_ARGS{{"bank", bank_id+1, Integer}}, 1, &res); + char *success = dmjson_get_value(res, 1, "success"); + if (strcmp(success, "true") != 0) + return FAULT_9001; + } } break; } diff --git a/libbbf_api/dmbbf.c b/libbbf_api/dmbbf.c index 6f6913b7..90fb7c6e 100644 --- a/libbbf_api/dmbbf.c +++ b/libbbf_api/dmbbf.c @@ -1700,8 +1700,13 @@ static int mparam_set_value(DMPARAM_ARGS) return fault; } add_set_list_tmp(dmctx, dmctx->in_param, dmctx->in_value); - } else if (dmctx->setaction == VALUESET) - (set_cmd)(refparam, dmctx, data, instance, dmctx->in_value, VALUESET); + } else if (dmctx->setaction == VALUESET) { + int fault = (set_cmd)(refparam, dmctx, data, instance, dmctx->in_value, VALUESET); + if (fault) { + dmfree(refparam); + return fault; + } + } dmfree(refparam); return 0; }