From: Felix Fietkau Date: Sun, 25 May 2014 18:58:51 +0000 (+0200) Subject: service: fix double-free in error path X-Git-Url: https://git.archive.openwrt.org/?p=project%2Fprocd.git;a=commitdiff_plain;h=0a80e92c03a90d5f6593b6af171bbed5480e0f55 service: fix double-free in error path Signed-off-by: Felix Fietkau --- diff --git a/service/service.c b/service/service.c index c566bc7..bfc8d49 100644 --- a/service/service.c +++ b/service/service.c @@ -216,13 +216,13 @@ service_handle_set(struct ubus_context *ctx, struct ubus_object *obj, struct blob_attr *tb[__SERVICE_SET_MAX], *cur; struct service *s = NULL; const char *name; - int ret = UBUS_STATUS_INVALID_ARGUMENT; bool add = !strcmp(method, "add"); + int ret; blobmsg_parse(service_set_attrs, __SERVICE_SET_MAX, tb, blob_data(msg), blob_len(msg)); cur = tb[SERVICE_ATTR_NAME]; if (!cur) - goto free; + return UBUS_STATUS_INVALID_ARGUMENT; name = blobmsg_data(cur); @@ -239,15 +239,11 @@ service_handle_set(struct ubus_context *ctx, struct ubus_object *obj, ret = service_update(s, msg, tb, add); if (ret) - goto free; + return ret; avl_insert(&services, &s->avl); return 0; - -free: - free(msg); - return ret; } static void