KVM: set_memory_region: Disallow changing read-only attribute later
authorTakuya Yoshikawa <yoshikawa_takuya_b1@lab.ntt.co.jp>
Wed, 30 Jan 2013 10:40:41 +0000 (19:40 +0900)
committerMarcelo Tosatti <mtosatti@redhat.com>
Tue, 5 Feb 2013 00:56:47 +0000 (22:56 -0200)
commit75d61fbcf563373696578570e914f555e12c8d97
tree8835d8a5cf79704569f568675792672c930746ae
parentf64c0398939483eb1d8951f24fbc21e94ed54457
KVM: set_memory_region: Disallow changing read-only attribute later

As Xiao pointed out, there are a few problems with it:
 - kvm_arch_commit_memory_region() write protects the memory slot only
   for GET_DIRTY_LOG when modifying the flags.
 - FNAME(sync_page) uses the old spte value to set a new one without
   checking KVM_MEM_READONLY flag.

Since we flush all shadow pages when creating a new slot, the simplest
fix is to disallow such problematic flag changes: this is safe because
no one is doing such things.

Reviewed-by: Gleb Natapov <gleb@redhat.com>
Signed-off-by: Takuya Yoshikawa <yoshikawa_takuya_b1@lab.ntt.co.jp>
Cc: Xiao Guangrong <xiaoguangrong@linux.vnet.ibm.com>
Cc: Alex Williamson <alex.williamson@redhat.com>
Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
Documentation/virtual/kvm/api.txt
virt/kvm/kvm_main.c