]> git.baikalelectronics.ru Git - arm-tf.git/commit
io: block: fix block_read/write may read/write overlap buffer
authorRoberto Vargas <roberto.vargas@arm.com>
Thu, 23 Nov 2017 12:03:46 +0000 (12:03 +0000)
committerRoberto Vargas <roberto.vargas@arm.com>
Wed, 13 Dec 2017 09:13:37 +0000 (09:13 +0000)
commite19e40af9717542ad70e8b9479bca7373b8609fe
tree7a5b1e6aaa670856e5769a88cd1c741c82578df7
parente2ff5ef8618c0d1213f783875bf15a6e601a2d48
io: block: fix block_read/write may read/write overlap buffer

The block operations were trying to optimize the number of memory
copies, and it tried to use directly the buffer supplied by the user
to them. This was a mistake because it created too many corner cases:

1- It was possible to generate unaligned
   operations to unaligned buffers. Drivers that were using
   DMA transfer failed in that case.

2- It was possible to generate read operations
   with sizes that weren't a multiple of the block size. Some
   low level drivers assumed that condition and they calculated
   the number of blocks dividing the number of bytes by the
   size of the block, without considering the remaining bytes.

3- The block_* operations didn't control the
   number of bytes actually copied to memory, because the
   low level drivers were writing directly to the user buffer.

This patch rewrite block_read and block_write to use always the device
buffer, which the platform ensures that has the correct aligment and
the correct size.

Change-Id: I5e479bb7bc137e6ec205a8573eb250acd5f40420
Signed-off-by: Qixiang Xu <qixiang.xu@arm.com>
Signed-off-by: Roberto Vargas <roberto.vargas@arm.com>
drivers/io/io_block.c