Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
accel/tcg: Fix sense of read-only probes in ldst_atomicity
In the initial commit, cdfac37, the sense of the test is incorrect,
as the -1/0 return was confusing.  In bef6f00, we mechanically
invert all callers while changing to false/true return, preserving the
incorrectness of the test.

Now that the return sense is sane, it's easy to see that if !write,
then the page is not modifiable (i.e. most likely read-only, with
PROT_NONE handled via SIGSEGV).

Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
  • Loading branch information
rth7680 committed Jul 23, 2023
1 parent 990ef91 commit f1ce0b8
Showing 1 changed file with 2 additions and 2 deletions.
4 changes: 2 additions & 2 deletions accel/tcg/ldst_atomicity.c.inc
Expand Up @@ -159,7 +159,7 @@ static uint64_t load_atomic8_or_exit(CPUArchState *env, uintptr_t ra, void *pv)
* another process, because the fallback start_exclusive solution
* provides no protection across processes.
*/
if (page_check_range(h2g(pv), 8, PAGE_WRITE_ORG)) {
if (!page_check_range(h2g(pv), 8, PAGE_WRITE_ORG)) {
uint64_t *p = __builtin_assume_aligned(pv, 8);
return *p;
}
Expand Down Expand Up @@ -194,7 +194,7 @@ static Int128 load_atomic16_or_exit(CPUArchState *env, uintptr_t ra, void *pv)
* another process, because the fallback start_exclusive solution
* provides no protection across processes.
*/
if (page_check_range(h2g(p), 16, PAGE_WRITE_ORG)) {
if (!page_check_range(h2g(p), 16, PAGE_WRITE_ORG)) {
return *p;
}
#endif
Expand Down

0 comments on commit f1ce0b8

Please sign in to comment.