Skip to content

Commit 6bcfb7f

Browse files
bibo-maochenhuacai
authored andcommitted
LoongArch: KVM: Fix base address calculation in kvm_eiointc_regs_access()
In function kvm_eiointc_regs_access(), the register base address is caculated from array base address plus offset, the offset is absolute value from the base address. The data type of array base address is u64, it should be converted into the "void *" type and then plus the offset. Cc: <stable@vger.kernel.org> Fixes: d3e43a1 ("LoongArch: KVM: Use 64-bit register definition for EIOINTC"). Reported-by: Aurelien Jarno <aurel32@debian.org> Link: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1131431 Signed-off-by: Bibo Mao <maobibo@loongson.cn> Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
1 parent b97bd69 commit 6bcfb7f

1 file changed

Lines changed: 7 additions & 7 deletions

File tree

arch/loongarch/kvm/intc/eiointc.c

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -472,34 +472,34 @@ static int kvm_eiointc_regs_access(struct kvm_device *dev,
472472
switch (addr) {
473473
case EIOINTC_NODETYPE_START ... EIOINTC_NODETYPE_END:
474474
offset = (addr - EIOINTC_NODETYPE_START) / 4;
475-
p = s->nodetype + offset * 4;
475+
p = (void *)s->nodetype + offset * 4;
476476
break;
477477
case EIOINTC_IPMAP_START ... EIOINTC_IPMAP_END:
478478
offset = (addr - EIOINTC_IPMAP_START) / 4;
479-
p = &s->ipmap + offset * 4;
479+
p = (void *)&s->ipmap + offset * 4;
480480
break;
481481
case EIOINTC_ENABLE_START ... EIOINTC_ENABLE_END:
482482
offset = (addr - EIOINTC_ENABLE_START) / 4;
483-
p = s->enable + offset * 4;
483+
p = (void *)s->enable + offset * 4;
484484
break;
485485
case EIOINTC_BOUNCE_START ... EIOINTC_BOUNCE_END:
486486
offset = (addr - EIOINTC_BOUNCE_START) / 4;
487-
p = s->bounce + offset * 4;
487+
p = (void *)s->bounce + offset * 4;
488488
break;
489489
case EIOINTC_ISR_START ... EIOINTC_ISR_END:
490490
offset = (addr - EIOINTC_ISR_START) / 4;
491-
p = s->isr + offset * 4;
491+
p = (void *)s->isr + offset * 4;
492492
break;
493493
case EIOINTC_COREISR_START ... EIOINTC_COREISR_END:
494494
if (cpu >= s->num_cpu)
495495
return -EINVAL;
496496

497497
offset = (addr - EIOINTC_COREISR_START) / 4;
498-
p = s->coreisr[cpu] + offset * 4;
498+
p = (void *)s->coreisr[cpu] + offset * 4;
499499
break;
500500
case EIOINTC_COREMAP_START ... EIOINTC_COREMAP_END:
501501
offset = (addr - EIOINTC_COREMAP_START) / 4;
502-
p = s->coremap + offset * 4;
502+
p = (void *)s->coremap + offset * 4;
503503
break;
504504
default:
505505
kvm_err("%s: unknown eiointc register, addr = %d\n", __func__, addr);

0 commit comments

Comments
 (0)