mirror of
https://github.com/torvalds/linux.git
synced 2026-09-23 22:14:03 +02:00
rust: dma: return zero for Coherent reads past EOF
Coherent<T>::write_to_slice() calculates a zero-byte copy when the file
offset is beyond the allocation, but still calls
UserSliceWriter::write_dma(). The latter rejects offsets beyond the
allocation even when the copy length is zero, so a debugfs read past EOF
returns -ERANGE.
Return before calling write_dma() when the offset is at or beyond the
allocation, matching simple_read_from_buffer() EOF semantics.
Fixes: 0168185139 ("rust: dma: implement BinaryWriter for Coherent<[u8]>")
Cc: stable@vger.kernel.org
Link: https://rust-for-linux.zulipchat.com/#narrow/channel/291566-Library/topic/.E2.9C.94.20Possible.20past-EOF.20bug.20in.20Coherent.3CT.3E.3A.3Awrite_to_slice/near/611677095
Signed-off-by: Younes Akhouayri <git@younes.io>
Reviewed-by: Alexandre Courbot <acourbot@nvidia.com>
Reviewed-by: Onur Özkan <work@onurozkan.dev>
Link: https://patch.msgid.link/20260730-fix-dma-coherent-eof-v2-1-8aff21054afa@younes.io
Signed-off-by: Danilo Krummrich <dakr@kernel.org>
This commit is contained in:
parent
2230d38828
commit
5391b147d9
|
|
@ -967,7 +967,11 @@ fn write_to_slice(
|
|||
return Ok(0);
|
||||
};
|
||||
|
||||
let count = self.size().saturating_sub(offset_val).min(writer.len());
|
||||
if offset_val >= self.size() {
|
||||
return Ok(0);
|
||||
}
|
||||
|
||||
let count = (self.size() - offset_val).min(writer.len());
|
||||
|
||||
writer.write_dma(self, offset_val, count)?;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user