summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndy Shevchenko <andriy.shevchenko@linux.intel.com>2015-12-29 06:07:50 -0500
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>2015-12-31 20:09:51 -0500
commitf6740c1899d2ee2c4c9ec5301d4b712d4e706a79 (patch)
treeb4068aff9f3ff449508a4f27ae8e7625b4bc20bf
parent0fb5902f2f9ec7996a0846087f3e69165ea9ce1e (diff)
device property: avoid allocations of 0 length
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@linux.intel.com> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
-rw-r--r--drivers/base/property.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/drivers/base/property.c b/drivers/base/property.c
index b3429cc4ee63..c359351d50f1 100644
--- a/drivers/base/property.c
+++ b/drivers/base/property.c
@@ -653,6 +653,9 @@ int fwnode_property_match_string(struct fwnode_handle *fwnode,
653 if (nval < 0) 653 if (nval < 0)
654 return nval; 654 return nval;
655 655
656 if (nval == 0)
657 return -ENODATA;
658
656 values = kcalloc(nval, sizeof(*values), GFP_KERNEL); 659 values = kcalloc(nval, sizeof(*values), GFP_KERNEL);
657 if (!values) 660 if (!values)
658 return -ENOMEM; 661 return -ENOMEM;
@@ -718,6 +721,9 @@ static int pset_copy_entry(struct property_entry *dst,
718 return -ENOMEM; 721 return -ENOMEM;
719 722
720 if (src->is_array) { 723 if (src->is_array) {
724 if (!src->length)
725 return -ENODATA;
726
721 if (src->is_string) { 727 if (src->is_string) {
722 nval = src->length / sizeof(const char *); 728 nval = src->length / sizeof(const char *);
723 dst->pointer.str = kcalloc(nval, sizeof(const char *), 729 dst->pointer.str = kcalloc(nval, sizeof(const char *),