]> git.ipfire.org Git - thirdparty/qemu.git/commit
target/loongarch: Fix valid virtual address checking
authorBibo Mao <maobibo@loongson.cn>
Mon, 14 Jul 2025 01:54:46 +0000 (09:54 +0800)
committerMichael Tokarev <mjt@tls.msk.ru>
Sat, 2 Aug 2025 05:09:19 +0000 (08:09 +0300)
commitd6b2796a2831d4ba40021cc260c06ca6c6dc8130
treeeaca60902f547f983df306fe1860cfd70a7b49f2
parent93890300d89c19fe76dbed272d6028333add50d2
target/loongarch: Fix valid virtual address checking

On LoongArch64 system, the high 32 bit of 64 bit virtual address should be
0x00000[0-7]yyy or 0xffff8yyy. The bit from 47 to 63 should be all 0 or
all 1.

Function get_physical_address() only checks bit 48 to 63, there will be
problem with the following test case. On physical machine, there is bus
error report and program exits abnormally. However on qemu TCG system
emulation mode, the program runs normally. The virtual address
0xffff000000000000ULL + addr and addr are treated the same on TLB entry
checking. This patch fixes this issue.

void main()
{
        void *addr, *addr1;
        int val;

        addr = malloc(100);
        *(int *)addr = 1;
        addr1 = 0xffff000000000000ULL + addr;
        val = *(int *)addr1;
        printf("val %d \n", val);
}

Cc: qemu-stable@nongnu.org
Signed-off-by: Bibo Mao <maobibo@loongson.cn>
Acked-by: Song Gao <gaosong@loongson.cn>
Reviewed-by: Song Gao <gaosong@loongson.cn>
Message-ID: <20250714015446.746163-1-maobibo@loongson.cn>
Signed-off-by: Song Gao <gaosong@loongson.cn>
(cherry picked from commit caab7ac83507e3e9a5fe2f37be5cfa759e766ba2)
Signed-off-by: Michael Tokarev <mjt@tls.msk.ru>
target/loongarch/cpu_helper.c