diff options
author | Denis Rastyogin <gerben@altlinux.org> | 2025-08-14 13:48:32 +0300 |
---|---|---|
committer | Philippe Mathieu-Daudé <philmd@linaro.org> | 2025-09-02 17:57:05 +0200 |
commit | 1f82ca723478f44823a18e7151e487d58da03659 (patch) | |
tree | 6d3d4473c6b96d9f6b768c67ced3279b7bbe95e8 | |
parent | 51c3aebfda6489b49cebef593a1ceb597cb97a7e (diff) | |
download | qemu-1f82ca723478f44823a18e7151e487d58da03659.zip qemu-1f82ca723478f44823a18e7151e487d58da03659.tar.gz qemu-1f82ca723478f44823a18e7151e487d58da03659.tar.bz2 |
target/mips: fix TLB huge page check to use 64-bit shift
Use extract64(entry, psn, 1) instead of (entry & (1 << psn)) to avoid
undefined behavior for shifts by 32–63 and to make bit extraction intent explicit.
Found by Linux Verification Center (linuxtesting.org) with SVACE.
Signed-off-by: Denis Rastyogin <gerben@altlinux.org>
Message-ID: <20250814104914.13101-1-gerben@altlinux.org>
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
-rw-r--r-- | target/mips/tcg/system/tlb_helper.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/target/mips/tcg/system/tlb_helper.c b/target/mips/tcg/system/tlb_helper.c index eccaf36..1e89015 100644 --- a/target/mips/tcg/system/tlb_helper.c +++ b/target/mips/tcg/system/tlb_helper.c @@ -652,7 +652,7 @@ static int walk_directory(CPUMIPSState *env, uint64_t *vaddr, return 0; } - if ((entry & (1 << psn)) && hugepg) { + if (extract64(entry, psn, 1) && hugepg) { *huge_page = true; *hgpg_directory_hit = true; entry = get_tlb_entry_layout(env, entry, leaf_mop, pf_ptew); |