From 0a80e92c03a90d5f6593b6af171bbed5480e0f55 Mon Sep 17 00:00:00 2001 From: Felix Fietkau Date: Sun, 25 May 2014 20:58:51 +0200 Subject: [PATCH] service: fix double-free in error path Signed-off-by: Felix Fietkau --- service/service.c | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) 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 -- 2.25.1