git: 2e297cbb4fc0 - main - arm64: fix db_read_bytes() for size == 8
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Thu, 18 Jan 2024 17:00:19 UTC
The branch main has been updated by mhorne: URL: https://cgit.FreeBSD.org/src/commit/?id=2e297cbb4fc057e1872114ef8a37a41a6669dd5b commit 2e297cbb4fc057e1872114ef8a37a41a6669dd5b Author: Mitchell Horne <mhorne@FreeBSD.org> AuthorDate: 2024-01-17 16:45:41 +0000 Commit: Mitchell Horne <mhorne@FreeBSD.org> CommitDate: 2024-01-18 17:00:07 +0000 arm64: fix db_read_bytes() for size == 8 There is a mistake in the cast, resulting in a truncated read to tmp64. Switch from int to uint64_t, and adjust the other casts for clarity. Add a comment explaining why we do this at all. Reported by: dfr Reviewed by: dfr, mmel, emaste, jhb (all a previous version) PR: 276406 MFC after: 3 days Fixes: a67687fcd8f5 ("Use native-sized accesses when accessing memory from kdb") --- sys/arm64/arm64/db_interface.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/sys/arm64/arm64/db_interface.c b/sys/arm64/arm64/db_interface.c index 8d97ab46a837..0b1c58ca88a0 100644 --- a/sys/arm64/arm64/db_interface.c +++ b/sys/arm64/arm64/db_interface.c @@ -124,14 +124,20 @@ db_read_bytes(vm_offset_t addr, size_t size, char *data) if (ret == 0) { src = (const char *)addr; + + /* + * Perform a native-sized memory access, if possible. This + * enables reading from MMIO devices that don't support single + * byte access. + */ if (size == 8 && (addr & 7) == 0) { - tmp64 = *((const int *)src); + tmp64 = *((const uint64_t *)src); src = (const char *)&tmp64; } else if (size == 4 && (addr & 3) == 0) { - tmp32 = *((const int *)src); + tmp32 = *((const uint32_t *)src); src = (const char *)&tmp32; } else if (size == 2 && (addr & 1) == 0) { - tmp16 = *((const short *)src); + tmp16 = *((const uint16_t *)src); src = (const char *)&tmp16; } while (size-- > 0)