BCC: l...@intel.com CC: kbuild-...@lists.01.org CC: linux-ker...@vger.kernel.org TO: "Janis Schoetterl-Glausch" <s...@linux.ibm.com> CC: Christian Borntraeger <borntrae...@linux.ibm.com> CC: Janosch Frank <fran...@linux.ibm.com>
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master head: f6eb0fed6a3957c0b93e3a00c1ffaad84d4ffc31 commit: e613d83454d7da1c37d78edb278db9c20afb21a2 KVM: s390: Honor storage keys when accessing guest memory date: 6 months ago :::::: branch date: 3 hours ago :::::: commit date: 6 months ago config: s390-randconfig-m031-20220812 (https://download.01.org/0day-ci/archive/20220814/202208140957.trqqbiqi-...@intel.com/config) compiler: s390-linux-gcc (GCC) 12.1.0 If you fix the issue, kindly add following tag where applicable Reported-by: kernel test robot <l...@intel.com> Reported-by: Dan Carpenter <dan.carpen...@oracle.com> New smatch warnings: arch/s390/kvm/gaccess.c:1064 access_guest_with_key() error: uninitialized symbol 'prot'. Old smatch warnings: arch/s390/kvm/gaccess.c:935 guest_range_to_gpas() error: uninitialized symbol 'prot'. vim +/prot +1064 arch/s390/kvm/gaccess.c e613d83454d7da Janis Schoetterl-Glausch 2022-02-11 996 e613d83454d7da Janis Schoetterl-Glausch 2022-02-11 997 int access_guest_with_key(struct kvm_vcpu *vcpu, unsigned long ga, u8 ar, e613d83454d7da Janis Schoetterl-Glausch 2022-02-11 998 void *data, unsigned long len, enum gacc_mode mode, e613d83454d7da Janis Schoetterl-Glausch 2022-02-11 999 u8 access_key) 2293897805c2fe Heiko Carstens 2014-01-01 1000 { 2293897805c2fe Heiko Carstens 2014-01-01 1001 psw_t *psw = &vcpu->arch.sie_block->gpsw; 7faa543df19bf6 Janis Schoetterl-Glausch 2021-11-26 1002 unsigned long nr_pages, idx; 7faa543df19bf6 Janis Schoetterl-Glausch 2021-11-26 1003 unsigned long gpa_array[2]; 416e7f0c9d613b Janis Schoetterl-Glausch 2021-11-26 1004 unsigned int fragment_len; 7faa543df19bf6 Janis Schoetterl-Glausch 2021-11-26 1005 unsigned long *gpas; e613d83454d7da Janis Schoetterl-Glausch 2022-02-11 1006 enum prot_type prot; 8a242234b4bfed Heiko Carstens 2014-01-10 1007 int need_ipte_lock; 8a242234b4bfed Heiko Carstens 2014-01-10 1008 union asce asce; e613d83454d7da Janis Schoetterl-Glausch 2022-02-11 1009 bool try_storage_prot_override; e613d83454d7da Janis Schoetterl-Glausch 2022-02-11 1010 bool try_fetch_prot_override; 2293897805c2fe Heiko Carstens 2014-01-01 1011 int rc; 2293897805c2fe Heiko Carstens 2014-01-01 1012 2293897805c2fe Heiko Carstens 2014-01-01 1013 if (!len) 2293897805c2fe Heiko Carstens 2014-01-01 1014 return 0; 6167375b558196 David Hildenbrand 2016-05-31 1015 ga = kvm_s390_logical_to_effective(vcpu, ga); 6167375b558196 David Hildenbrand 2016-05-31 1016 rc = get_vcpu_asce(vcpu, &asce, ga, ar, mode); 664b4973537068 Alexander Yarygin 2015-03-09 1017 if (rc) 664b4973537068 Alexander Yarygin 2015-03-09 1018 return rc; 2293897805c2fe Heiko Carstens 2014-01-01 1019 nr_pages = (((ga & ~PAGE_MASK) + len - 1) >> PAGE_SHIFT) + 1; 7faa543df19bf6 Janis Schoetterl-Glausch 2021-11-26 1020 gpas = gpa_array; 7faa543df19bf6 Janis Schoetterl-Glausch 2021-11-26 1021 if (nr_pages > ARRAY_SIZE(gpa_array)) 7faa543df19bf6 Janis Schoetterl-Glausch 2021-11-26 1022 gpas = vmalloc(array_size(nr_pages, sizeof(unsigned long))); 7faa543df19bf6 Janis Schoetterl-Glausch 2021-11-26 1023 if (!gpas) 2293897805c2fe Heiko Carstens 2014-01-01 1024 return -ENOMEM; e613d83454d7da Janis Schoetterl-Glausch 2022-02-11 1025 try_fetch_prot_override = fetch_prot_override_applicable(vcpu, mode, asce); e613d83454d7da Janis Schoetterl-Glausch 2022-02-11 1026 try_storage_prot_override = storage_prot_override_applicable(vcpu); a752598254016d Heiko Carstens 2017-06-03 1027 need_ipte_lock = psw_bits(*psw).dat && !asce.r; 8a242234b4bfed Heiko Carstens 2014-01-10 1028 if (need_ipte_lock) 8a242234b4bfed Heiko Carstens 2014-01-10 1029 ipte_lock(vcpu); e613d83454d7da Janis Schoetterl-Glausch 2022-02-11 1030 /* e613d83454d7da Janis Schoetterl-Glausch 2022-02-11 1031 * Since we do the access further down ultimately via a move instruction e613d83454d7da Janis Schoetterl-Glausch 2022-02-11 1032 * that does key checking and returns an error in case of a protection e613d83454d7da Janis Schoetterl-Glausch 2022-02-11 1033 * violation, we don't need to do the check during address translation. e613d83454d7da Janis Schoetterl-Glausch 2022-02-11 1034 * Skip it by passing access key 0, which matches any storage key, e613d83454d7da Janis Schoetterl-Glausch 2022-02-11 1035 * obviating the need for any further checks. As a result the check is e613d83454d7da Janis Schoetterl-Glausch 2022-02-11 1036 * handled entirely in hardware on access, we only need to take care to e613d83454d7da Janis Schoetterl-Glausch 2022-02-11 1037 * forego key protection checking if fetch protection override applies or e613d83454d7da Janis Schoetterl-Glausch 2022-02-11 1038 * retry with the special key 9 in case of storage protection override. e613d83454d7da Janis Schoetterl-Glausch 2022-02-11 1039 */ e613d83454d7da Janis Schoetterl-Glausch 2022-02-11 1040 rc = guest_range_to_gpas(vcpu, ga, ar, gpas, len, asce, mode, 0); e613d83454d7da Janis Schoetterl-Glausch 2022-02-11 1041 if (rc) e613d83454d7da Janis Schoetterl-Glausch 2022-02-11 1042 goto out_unlock; e613d83454d7da Janis Schoetterl-Glausch 2022-02-11 1043 for (idx = 0; idx < nr_pages; idx++) { 7faa543df19bf6 Janis Schoetterl-Glausch 2021-11-26 1044 fragment_len = min(PAGE_SIZE - offset_in_page(gpas[idx]), len); e613d83454d7da Janis Schoetterl-Glausch 2022-02-11 1045 if (try_fetch_prot_override && fetch_prot_override_applies(ga, fragment_len)) { e613d83454d7da Janis Schoetterl-Glausch 2022-02-11 1046 rc = access_guest_page(vcpu->kvm, mode, gpas[idx], e613d83454d7da Janis Schoetterl-Glausch 2022-02-11 1047 data, fragment_len); e613d83454d7da Janis Schoetterl-Glausch 2022-02-11 1048 } else { e613d83454d7da Janis Schoetterl-Glausch 2022-02-11 1049 rc = access_guest_page_with_key(vcpu->kvm, mode, gpas[idx], e613d83454d7da Janis Schoetterl-Glausch 2022-02-11 1050 data, fragment_len, access_key); e613d83454d7da Janis Schoetterl-Glausch 2022-02-11 1051 } e613d83454d7da Janis Schoetterl-Glausch 2022-02-11 1052 if (rc == PGM_PROTECTION && try_storage_prot_override) e613d83454d7da Janis Schoetterl-Glausch 2022-02-11 1053 rc = access_guest_page_with_key(vcpu->kvm, mode, gpas[idx], e613d83454d7da Janis Schoetterl-Glausch 2022-02-11 1054 data, fragment_len, PAGE_SPO_ACC); e613d83454d7da Janis Schoetterl-Glausch 2022-02-11 1055 if (rc == PGM_PROTECTION) e613d83454d7da Janis Schoetterl-Glausch 2022-02-11 1056 prot = PROT_TYPE_KEYC; e613d83454d7da Janis Schoetterl-Glausch 2022-02-11 1057 if (rc) e613d83454d7da Janis Schoetterl-Glausch 2022-02-11 1058 break; 416e7f0c9d613b Janis Schoetterl-Glausch 2021-11-26 1059 len -= fragment_len; 416e7f0c9d613b Janis Schoetterl-Glausch 2021-11-26 1060 data += fragment_len; e613d83454d7da Janis Schoetterl-Glausch 2022-02-11 1061 ga = kvm_s390_logical_to_effective(vcpu, ga + fragment_len); 2293897805c2fe Heiko Carstens 2014-01-01 1062 } e613d83454d7da Janis Schoetterl-Glausch 2022-02-11 1063 if (rc > 0) e613d83454d7da Janis Schoetterl-Glausch 2022-02-11 @1064 rc = trans_exc(vcpu, rc, ga, ar, mode, prot); e613d83454d7da Janis Schoetterl-Glausch 2022-02-11 1065 out_unlock: 8a242234b4bfed Heiko Carstens 2014-01-10 1066 if (need_ipte_lock) 8a242234b4bfed Heiko Carstens 2014-01-10 1067 ipte_unlock(vcpu); 7faa543df19bf6 Janis Schoetterl-Glausch 2021-11-26 1068 if (nr_pages > ARRAY_SIZE(gpa_array)) 7faa543df19bf6 Janis Schoetterl-Glausch 2021-11-26 1069 vfree(gpas); 2293897805c2fe Heiko Carstens 2014-01-01 1070 return rc; 2293897805c2fe Heiko Carstens 2014-01-01 1071 } 2293897805c2fe Heiko Carstens 2014-01-01 1072 -- 0-DAY CI Kernel Test Service https://01.org/lkp _______________________________________________ kbuild mailing list -- kbuild@lists.01.org To unsubscribe send an email to kbuild-le...@lists.01.org