mirror of
https://github.com/torvalds/linux.git
synced 2024-12-29 06:12:08 +00:00
47016b341f
The current Cadence QSPI driver caused a kernel panic when loading
a Root Filesystem from QSPI. The problem was caused by reading more
bytes than needed because the QSPI operated on 4 bytes at a time.
<snip>
[ 7.947754] spi_nor_read[1048]:from 0x037cad74, len 1 [bfe07fff]
[ 7.956247] cqspi_read[910]:offset 0x58502516, buffer=bfe07fff
[ 7.956247]
[ 7.966046] Unable to handle kernel paging request at virtual
address bfe08002
[ 7.973239] pgd = eebfc000
[ 7.975931] [bfe08002] *pgd=2fffb811, *pte=00000000, *ppte=00000000
</snip>
Notice above how only 1 byte needed to be read but by reading 4 bytes
into the end of a mapped page, an unrecoverable page fault occurred.
This patch uses a temporary buffer to hold the 4 bytes read and then
copies only the bytes required into the buffer. A min() function is
used to limit the length to prevent buffer overflows.
Request testing of this patch on other platforms. This was tested
on the Intel Arria10 SoCFPGA DevKit.
Fixes:
|
||
---|---|---|
.. | ||
aspeed-smc.c | ||
atmel-quadspi.c | ||
cadence-quadspi.c | ||
fsl-quadspi.c | ||
hisi-sfc.c | ||
intel-spi-pci.c | ||
intel-spi-platform.c | ||
intel-spi.c | ||
intel-spi.h | ||
Kconfig | ||
Makefile | ||
mtk-quadspi.c | ||
nxp-spifi.c | ||
spi-nor.c | ||
stm32-quadspi.c |