Skip to content

Commit

Permalink
accel/tcg: Uncache the host address for instruction fetch when tlb si…
Browse files Browse the repository at this point in the history
…ze < 1

When PMP entry overlap part of the page, we'll set the tlb_size to 1, which
will make the address in tlb entry set with TLB_INVALID_MASK, and the next
access will again go through tlb_fill.However, this way will not work in
tb_gen_code() => get_page_addr_code_hostp(): the TLB host address will be
cached, and the following instructions can use this host address directly
which may lead to the bypass of PMP related check.
Resolves: https://gitlab.com/qemu-project/qemu/-/issues/1542.

Signed-off-by: Weiwei Li <liweiwei@iscas.ac.cn>
Signed-off-by: Junqiang Wang <wangjunqiang@iscas.ac.cn>
Reviewed-by: LIU Zhiwei <zhiwei_liu@linux.alibaba.com>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20230422130329.23555-6-liweiwei@iscas.ac.cn>
  • Loading branch information
Weiwei Li authored and rth7680 committed May 1, 2023
1 parent 3b07992 commit 5827422
Showing 1 changed file with 5 additions and 0 deletions.
5 changes: 5 additions & 0 deletions accel/tcg/cputlb.c
Original file line number Diff line number Diff line change
Expand Up @@ -1696,6 +1696,11 @@ tb_page_addr_t get_page_addr_code_hostp(CPUArchState *env, target_ulong addr,
if (p == NULL) {
return -1;
}

if (full->lg_page_size < TARGET_PAGE_BITS) {
return -1;
}

if (hostp) {
*hostp = p;
}
Expand Down

0 comments on commit 5827422

Please sign in to comment.