linux_dsm_epyc7002/arch/s390/mm
Dominik Dingel 2faee8ff9d s390/mm: prevent and break zero page mappings in case of storage keys
As soon as storage keys are enabled we need to stop working on zero page
mappings to prevent inconsistencies between storage keys and pgste.

Otherwise following data corruption could happen:
1) guest enables storage key
2) guest sets storage key for not mapped page X
   -> change goes to PGSTE
3) guest reads from page X
   -> as X was not dirty before, the page will be zero page backed,
      storage key from PGSTE for X will go to storage key for zero page
4) guest sets storage key for not mapped page Y (same logic as above
5) guest reads from page Y
   -> as Y was not dirty before, the page will be zero page backed,
      storage key from PGSTE for Y will got to storage key for zero page
      overwriting storage key for X

While holding the mmap sem, we are safe against changes on entries we
already fixed, as every fault would need to take the mmap_sem (read).

Other vCPUs executing storage key instructions will get a one time interception
and be serialized also with mmap_sem.

Signed-off-by: Dominik Dingel <dingel@linux.vnet.ibm.com>
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
2014-10-27 13:27:25 +01:00
..
cmm.c s390: convert use of typedef ctl_table to struct ctl_table 2013-10-28 08:36:25 +01:00
dump_pagetables.c s390/mm: remove change bit override support 2014-09-25 10:52:09 +02:00
extable.c s390/exceptions: switch to relative exception table entries 2012-09-26 15:45:10 +02:00
extmem.c s390/comments: unify copyright messages and remove file names 2012-07-20 11:15:04 +02:00
fault.c KVM: s390/mm: use radix trees for guest to host mappings 2014-08-26 10:09:02 +02:00
gup.c s390/gup: handle zero nr_pages case correctly 2013-10-24 17:17:01 +02:00
hugetlbpage.c s390/mm: remove change bit override support 2014-09-25 10:52:09 +02:00
init.c mm: export symbol dependencies of is_zero_pfn() 2014-09-14 16:25:14 +02:00
maccess.c s390/uaccess: remove copy_from_user_real() 2014-02-24 17:14:00 +01:00
Makefile s390/mem_detect: move memory detection code to mm folder 2013-05-02 15:50:22 +02:00
mem_detect.c s390/mm: Convert bootmem to memblock 2014-05-20 08:58:40 +02:00
mmap.c s390/mmap: randomize mmap base for bottom up direction 2013-11-13 12:09:08 +09:00
page-states.c s390/cmma: remove "cmma disable" code in case of dump again 2014-05-20 08:58:42 +02:00
pageattr.c s390/mm: make use of ipte range facility 2014-09-30 10:19:29 +02:00
pgtable.c s390/mm: prevent and break zero page mappings in case of storage keys 2014-10-27 13:27:25 +01:00
vmem.c Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux 2014-10-14 03:47:00 +02:00