nvmem: zynqmp_nvmem: Fix buffer size in DMA and memcpy
Buffer size used in dma allocation and memcpy is wrong.
It can lead to undersized DMA buffer access and possible
memory corruption. use correct buffer size in dma_alloc_coherent
and memcpy.
Fixes: 737c0c8d07 ("nvmem: zynqmp_nvmem: Add support to access efuse")
Cc: stable@vger.kernel.org
Signed-off-by: Ivan Vera <ivanverasantos@gmail.com>
Signed-off-by: Harish Ediga <harish.ediga@amd.com>
Signed-off-by: Harsh Jain <h.jain@amd.com>
Signed-off-by: Srinivas Kandagatla <srini@kernel.org>
Link: https://patch.msgid.link/20260327131645.3025781-3-srini@kernel.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
48b5163c95
commit
f9b88613ff
1 changed files with 4 additions and 4 deletions
|
|
@ -66,7 +66,7 @@ static int zynqmp_efuse_access(void *context, unsigned int offset,
|
|||
dma_addr_t dma_buf;
|
||||
size_t words = bytes / WORD_INBYTES;
|
||||
int ret;
|
||||
int value;
|
||||
unsigned int value;
|
||||
char *data;
|
||||
|
||||
if (bytes % WORD_INBYTES != 0) {
|
||||
|
|
@ -80,7 +80,7 @@ static int zynqmp_efuse_access(void *context, unsigned int offset,
|
|||
}
|
||||
|
||||
if (pufflag == 1 && flag == EFUSE_WRITE) {
|
||||
memcpy(&value, val, bytes);
|
||||
memcpy(&value, val, sizeof(value));
|
||||
if ((offset == EFUSE_PUF_START_OFFSET ||
|
||||
offset == EFUSE_PUF_MID_OFFSET) &&
|
||||
value & P_USER_0_64_UPPER_MASK) {
|
||||
|
|
@ -100,7 +100,7 @@ static int zynqmp_efuse_access(void *context, unsigned int offset,
|
|||
if (!efuse)
|
||||
return -ENOMEM;
|
||||
|
||||
data = dma_alloc_coherent(dev, sizeof(bytes),
|
||||
data = dma_alloc_coherent(dev, bytes,
|
||||
&dma_buf, GFP_KERNEL);
|
||||
if (!data) {
|
||||
ret = -ENOMEM;
|
||||
|
|
@ -134,7 +134,7 @@ static int zynqmp_efuse_access(void *context, unsigned int offset,
|
|||
if (flag == EFUSE_READ)
|
||||
memcpy(val, data, bytes);
|
||||
efuse_access_err:
|
||||
dma_free_coherent(dev, sizeof(bytes),
|
||||
dma_free_coherent(dev, bytes,
|
||||
data, dma_buf);
|
||||
efuse_data_fail:
|
||||
dma_free_coherent(dev, sizeof(struct xilinx_efuse),
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue