Skip to content

Commit 891ce08

Browse files
committed
KVM: s390: Fix FOLL_*/FAULT_FLAG_* confusion
JIRA: https://issues.redhat.com/browse/RHEL-113440 commit 5f9df94 Author: Claudio Imbrenda <imbrenda@linux.ibm.com> Date: Mon Aug 25 17:18:31 2025 +0200 KVM: s390: Fix FOLL_*/FAULT_FLAG_* confusion Pass the right type of flag to vcpu_dat_fault_handler(); it expects a FOLL_* flag (in particular FOLL_WRITE), but FAULT_FLAG_WRITE is passed instead. This still works because they happen to have the same integer value, but it's a mistake, thus the fix. Signed-off-by: Claudio Imbrenda <imbrenda@linux.ibm.com> Fixes: 05066ca ("s390/mm/fault: Handle guest-related program interrupts in KVM") Acked-by: Christian Borntraeger <borntraeger@linux.ibm.com> Reviewed-by: David Hildenbrand <david@redhat.com> Reviewed-by: Steffen Eiden <seiden@linux.ibm.com> Reviewed-by: Christoph Schlameuss <schlameuss@linux.ibm.com> Signed-off-by: Janosch Frank <frankja@linux.ibm.com> Signed-off-by: Thomas Huth <thuth@redhat.com>
1 parent 045e1d5 commit 891ce08

File tree

1 file changed

+12
-12
lines changed

1 file changed

+12
-12
lines changed

arch/s390/kvm/kvm-s390.c

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4861,12 +4861,12 @@ static void kvm_s390_assert_primary_as(struct kvm_vcpu *vcpu)
48614861
* @vcpu: the vCPU whose gmap is to be fixed up
48624862
* @gfn: the guest frame number used for memslots (including fake memslots)
48634863
* @gaddr: the gmap address, does not have to match @gfn for ucontrol gmaps
4864-
* @flags: FOLL_* flags
4864+
* @foll: FOLL_* flags
48654865
*
48664866
* Return: 0 on success, < 0 in case of error.
48674867
* Context: The mm lock must not be held before calling. May sleep.
48684868
*/
4869-
int __kvm_s390_handle_dat_fault(struct kvm_vcpu *vcpu, gfn_t gfn, gpa_t gaddr, unsigned int flags)
4869+
int __kvm_s390_handle_dat_fault(struct kvm_vcpu *vcpu, gfn_t gfn, gpa_t gaddr, unsigned int foll)
48704870
{
48714871
struct kvm_memory_slot *slot;
48724872
unsigned int fault_flags;
@@ -4880,13 +4880,13 @@ int __kvm_s390_handle_dat_fault(struct kvm_vcpu *vcpu, gfn_t gfn, gpa_t gaddr, u
48804880
if (!slot || slot->flags & KVM_MEMSLOT_INVALID)
48814881
return vcpu_post_run_addressing_exception(vcpu);
48824882

4883-
fault_flags = flags & FOLL_WRITE ? FAULT_FLAG_WRITE : 0;
4883+
fault_flags = foll & FOLL_WRITE ? FAULT_FLAG_WRITE : 0;
48844884
if (vcpu->arch.gmap->pfault_enabled)
4885-
flags |= FOLL_NOWAIT;
4885+
foll |= FOLL_NOWAIT;
48864886
vmaddr = __gfn_to_hva_memslot(slot, gfn);
48874887

48884888
try_again:
4889-
pfn = __kvm_faultin_pfn(slot, gfn, flags, &writable, &page);
4889+
pfn = __kvm_faultin_pfn(slot, gfn, foll, &writable, &page);
48904890

48914891
/* Access outside memory, inject addressing exception */
48924892
if (is_noslot_pfn(pfn))
@@ -4902,7 +4902,7 @@ int __kvm_s390_handle_dat_fault(struct kvm_vcpu *vcpu, gfn_t gfn, gpa_t gaddr, u
49024902
return 0;
49034903
vcpu->stat.pfault_sync++;
49044904
/* Could not setup async pfault, try again synchronously */
4905-
flags &= ~FOLL_NOWAIT;
4905+
foll &= ~FOLL_NOWAIT;
49064906
goto try_again;
49074907
}
49084908
/* Any other error */
@@ -4922,7 +4922,7 @@ int __kvm_s390_handle_dat_fault(struct kvm_vcpu *vcpu, gfn_t gfn, gpa_t gaddr, u
49224922
return rc;
49234923
}
49244924

4925-
static int vcpu_dat_fault_handler(struct kvm_vcpu *vcpu, unsigned long gaddr, unsigned int flags)
4925+
static int vcpu_dat_fault_handler(struct kvm_vcpu *vcpu, unsigned long gaddr, unsigned int foll)
49264926
{
49274927
unsigned long gaddr_tmp;
49284928
gfn_t gfn;
@@ -4947,18 +4947,18 @@ static int vcpu_dat_fault_handler(struct kvm_vcpu *vcpu, unsigned long gaddr, un
49474947
}
49484948
gfn = gpa_to_gfn(gaddr_tmp);
49494949
}
4950-
return __kvm_s390_handle_dat_fault(vcpu, gfn, gaddr, flags);
4950+
return __kvm_s390_handle_dat_fault(vcpu, gfn, gaddr, foll);
49514951
}
49524952

49534953
static int vcpu_post_run_handle_fault(struct kvm_vcpu *vcpu)
49544954
{
4955-
unsigned int flags = 0;
4955+
unsigned int foll = 0;
49564956
unsigned long gaddr;
49574957
int rc;
49584958

49594959
gaddr = current->thread.gmap_teid.addr * PAGE_SIZE;
49604960
if (kvm_s390_cur_gmap_fault_is_write())
4961-
flags = FAULT_FLAG_WRITE;
4961+
foll = FOLL_WRITE;
49624962

49634963
switch (current->thread.gmap_int_code & PGM_INT_CODE_MASK) {
49644964
case 0:
@@ -5000,7 +5000,7 @@ static int vcpu_post_run_handle_fault(struct kvm_vcpu *vcpu)
50005000
send_sig(SIGSEGV, current, 0);
50015001
if (rc != -ENXIO)
50025002
break;
5003-
flags = FAULT_FLAG_WRITE;
5003+
foll = FOLL_WRITE;
50045004
fallthrough;
50055005
case PGM_PROTECTION:
50065006
case PGM_SEGMENT_TRANSLATION:
@@ -5010,7 +5010,7 @@ static int vcpu_post_run_handle_fault(struct kvm_vcpu *vcpu)
50105010
case PGM_REGION_SECOND_TRANS:
50115011
case PGM_REGION_THIRD_TRANS:
50125012
kvm_s390_assert_primary_as(vcpu);
5013-
return vcpu_dat_fault_handler(vcpu, gaddr, flags);
5013+
return vcpu_dat_fault_handler(vcpu, gaddr, foll);
50145014
default:
50155015
KVM_BUG(1, vcpu->kvm, "Unexpected program interrupt 0x%x, TEID 0x%016lx",
50165016
current->thread.gmap_int_code, current->thread.gmap_teid.val);

0 commit comments

Comments
 (0)