| From fb95025183e660f8a8d0233a87dfc026f7f9de39 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Fri, 16 Aug 2019 00:08:27 -0500 |
| Subject: ACPI: custom_method: fix memory leaks |
| |
| From: Wenwen Wang <wenwen@cs.uga.edu> |
| |
| [ Upstream commit 03d1571d9513369c17e6848476763ebbd10ec2cb ] |
| |
| In cm_write(), 'buf' is allocated through kzalloc(). In the following |
| execution, if an error occurs, 'buf' is not deallocated, leading to memory |
| leaks. To fix this issue, free 'buf' before returning the error. |
| |
| Fixes: 526b4af47f44 ("ACPI: Split out custom_method functionality into an own driver") |
| Signed-off-by: Wenwen Wang <wenwen@cs.uga.edu> |
| Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/acpi/custom_method.c | 5 ++++- |
| 1 file changed, 4 insertions(+), 1 deletion(-) |
| |
| diff --git a/drivers/acpi/custom_method.c b/drivers/acpi/custom_method.c |
| index c68e72414a67a..435bd0ffc8c02 100644 |
| --- a/drivers/acpi/custom_method.c |
| +++ b/drivers/acpi/custom_method.c |
| @@ -48,8 +48,10 @@ static ssize_t cm_write(struct file *file, const char __user * user_buf, |
| if ((*ppos > max_size) || |
| (*ppos + count > max_size) || |
| (*ppos + count < count) || |
| - (count > uncopied_bytes)) |
| + (count > uncopied_bytes)) { |
| + kfree(buf); |
| return -EINVAL; |
| + } |
| |
| if (copy_from_user(buf + (*ppos), user_buf, count)) { |
| kfree(buf); |
| @@ -69,6 +71,7 @@ static ssize_t cm_write(struct file *file, const char __user * user_buf, |
| add_taint(TAINT_OVERRIDDEN_ACPI_TABLE, LOCKDEP_NOW_UNRELIABLE); |
| } |
| |
| + kfree(buf); |
| return count; |
| } |
| |
| -- |
| 2.20.1 |
| |