You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
43 lines
1.3 KiB
Diff
43 lines
1.3 KiB
Diff
From 313a72ff983cc2e00ac4dcb791d40ebf2f9d5718 Mon Sep 17 00:00:00 2001
|
|
From: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
|
|
Date: Tue, 17 Nov 2015 09:12:41 +0000
|
|
Subject: nvmem: core: return error for non word aligned access
|
|
|
|
nvmem providers have restrictions on register strides, so return error
|
|
when users attempt to read/write buffers with sizes which are less
|
|
than word size.
|
|
|
|
Without this patch the userspace would continue to try as it does not
|
|
get any error from the nvmem core, resulting in a hang or endless loop
|
|
in userspace.
|
|
|
|
Reported-by: Ariel D'Alessandro <ariel@vanguardiasur.com.ar>
|
|
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
|
|
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
|
---
|
|
drivers/nvmem/core.c | 6 ++++++
|
|
1 file changed, 6 insertions(+)
|
|
|
|
--- a/drivers/nvmem/core.c
|
|
+++ b/drivers/nvmem/core.c
|
|
@@ -70,6 +70,9 @@ static ssize_t bin_attr_nvmem_read(struc
|
|
if (pos >= nvmem->size)
|
|
return 0;
|
|
|
|
+ if (count < nvmem->word_size)
|
|
+ return -EINVAL;
|
|
+
|
|
if (pos + count > nvmem->size)
|
|
count = nvmem->size - pos;
|
|
|
|
@@ -95,6 +98,9 @@ static ssize_t bin_attr_nvmem_write(stru
|
|
if (pos >= nvmem->size)
|
|
return 0;
|
|
|
|
+ if (count < nvmem->word_size)
|
|
+ return -EINVAL;
|
|
+
|
|
if (pos + count > nvmem->size)
|
|
count = nvmem->size - pos;
|
|
|