[linux-yocto] [PATCH 12/12] device property: avoid allocations of 0 length

weifeng.voon at intel.com weifeng.voon at intel.com
Tue Mar 22 02:21:28 PDT 2016


From: Andy Shevchenko <andriy.shevchenko at linux.intel.com>

Arrays can not have zero elements by definition of the unified device
properties. If such property comes from outside we should not allow it to pass.
Otherwise memory allocation on 0 length will return non-NULL value, which we
currently don't check.

Prevent memory allocations of 0 length.

Signed-off-by: Andy Shevchenko <andriy.shevchenko at linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki at intel.com>
(cherry picked from commit f6740c1899d2ee2c4c9ec5301d4b712d4e706a79)
Signed-off-by: Voon, Weifeng <weifeng.voon at intel.com>
---
 drivers/base/property.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/drivers/base/property.c b/drivers/base/property.c
index c478cf0..6b98c80 100644
--- a/drivers/base/property.c
+++ b/drivers/base/property.c
@@ -650,6 +650,9 @@ int fwnode_property_match_string(struct fwnode_handle *fwnode,
 	if (nval < 0)
 		return nval;
 
+	if (nval == 0)
+		return -ENODATA;
+
 	values = kcalloc(nval, sizeof(*values), GFP_KERNEL);
 	if (!values)
 		return -ENOMEM;
@@ -715,6 +718,9 @@ static int pset_copy_entry(struct property_entry *dst,
 		return -ENOMEM;
 
 	if (src->is_array) {
+		if (!src->length)
+			return -ENODATA;
+
 		if (src->is_string) {
 			nval = src->length / sizeof(const char *);
 			dst->pointer.str = kcalloc(nval, sizeof(const char *),
-- 
1.9.1



More information about the linux-yocto mailing list