target-i386: check for PKU even for non-writable pages
commit44d066a2f770ee9d61fd1c2a609bdf2a994dfdf7
authorPaolo Bonzini <pbonzini@redhat.com>
Wed, 6 Apr 2016 07:45:42 +0000 (6 09:45 +0200)
committerPaolo Bonzini <pbonzini@redhat.com>
Thu, 7 Apr 2016 22:07:56 +0000 (8 00:07 +0200)
treea64a69cdd0e412cd2f1904279c41d6a05b93d312
parent57a6c059a632587f152c5bf0f5019c23a3fa3a8c
target-i386: check for PKU even for non-writable pages

Xiao Guangrong ran kvm-unit-tests on an actual machine with PKU and
found that it fails:

test pte.p pte.user pde.p pde.user pde.a pde.pse pkru.wd pkey=1 user write efer.nx cr4.pke: FAIL: error code 27 expected 7
Dump mapping: address: 0x123400000000
------L4: 2ebe007
------L3: 2ebf007
------L2: 8000000020000a5

(All failures are combinations of "pde.user pde.p pkru.wd pkey=1",
plus either "pde.pse" or "pte.p pte.user", plus one of "user cr0.wp",
"cr0.wp" or "user", plus unimportant bits such as accessed/dirty or
efer.nx).

So PFEC.PKEY is set even if the ordinary check failed (which it did
because pde.w is zero).  Adjust QEMU to match behavior of silicon.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
target-i386/helper.c