Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 88dfb8b4 authored by Christian Engelmayer's avatar Christian Engelmayer Committed by Olof Johansson
Browse files

platform/chrome: cros_ec: Fix leak in sequence_store()



The allocated cros_ec_command message structure is not freed in function
sequence_store(). Make sure that 'msg' is freed in all exit paths.
Detected by Coverity CID 1309667.

Signed-off-by: default avatarChristian Engelmayer <cengelma@gmx.at>
Signed-off-by: default avatarOlof Johansson <olof@lixom.net>
parent 23ecee32
Loading
Loading
Loading
Loading
+14 −9
Original line number Diff line number Diff line
@@ -352,10 +352,6 @@ static ssize_t sequence_store(struct device *dev, struct device_attribute *attr,
	struct cros_ec_dev *ec = container_of(dev,
					      struct cros_ec_dev, class_dev);

	msg = alloc_lightbar_cmd_msg(ec);
	if (!msg)
		return -ENOMEM;

	for (len = 0; len < count; len++)
		if (!isalnum(buf[len]))
			break;
@@ -370,21 +366,30 @@ static ssize_t sequence_store(struct device *dev, struct device_attribute *attr,
			return ret;
	}

	msg = alloc_lightbar_cmd_msg(ec);
	if (!msg)
		return -ENOMEM;

	param = (struct ec_params_lightbar *)msg->data;
	param->cmd = LIGHTBAR_CMD_SEQ;
	param->seq.num = num;
	ret = lb_throttle();
	if (ret)
		return ret;
		goto exit;

	ret = cros_ec_cmd_xfer(ec->ec_dev, msg);
	if (ret < 0)
		return ret;
		goto exit;

	if (msg->result != EC_RES_SUCCESS)
		return -EINVAL;
	if (msg->result != EC_RES_SUCCESS) {
		ret = -EINVAL;
		goto exit;
	}

	return count;
	ret = count;
exit:
	kfree(msg);
	return ret;
}

/* Module initialization */