* [PATCH] LoongArch: KVM: Fix base address calculation problem in kvm_eiointc_regs_access()
@ 2026-03-24 3:15 Bibo Mao
2026-03-26 7:50 ` Huacai Chen
0 siblings, 1 reply; 2+ messages in thread
From: Bibo Mao @ 2026-03-24 3:15 UTC (permalink / raw)
To: Huacai Chen; +Cc: Aurelien Jarno, kvm, loongarch, linux-kernel, stable
In function kvm_eiointc_regs_access(), register base address is caculated
from array base address plus offset, the offset is absolute value from base
address. The data type of array base address is u64, it should be converted
into void * type and then plus the offset.
Cc: <stable@vger.kernel.org>
Fixes: d3e43a1f34ac ("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>
---
arch/loongarch/kvm/intc/eiointc.c | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/arch/loongarch/kvm/intc/eiointc.c b/arch/loongarch/kvm/intc/eiointc.c
index d2acb4d09e73..71bd67b57338 100644
--- a/arch/loongarch/kvm/intc/eiointc.c
+++ b/arch/loongarch/kvm/intc/eiointc.c
@@ -472,34 +472,34 @@ static int kvm_eiointc_regs_access(struct kvm_device *dev,
switch (addr) {
case EIOINTC_NODETYPE_START ... EIOINTC_NODETYPE_END:
offset = (addr - EIOINTC_NODETYPE_START) / 4;
- p = s->nodetype + offset * 4;
+ p = (void *)s->nodetype + offset * 4;
break;
case EIOINTC_IPMAP_START ... EIOINTC_IPMAP_END:
offset = (addr - EIOINTC_IPMAP_START) / 4;
- p = &s->ipmap + offset * 4;
+ p = (void *)&s->ipmap + offset * 4;
break;
case EIOINTC_ENABLE_START ... EIOINTC_ENABLE_END:
offset = (addr - EIOINTC_ENABLE_START) / 4;
- p = s->enable + offset * 4;
+ p = (void *)s->enable + offset * 4;
break;
case EIOINTC_BOUNCE_START ... EIOINTC_BOUNCE_END:
offset = (addr - EIOINTC_BOUNCE_START) / 4;
- p = s->bounce + offset * 4;
+ p = (void *)s->bounce + offset * 4;
break;
case EIOINTC_ISR_START ... EIOINTC_ISR_END:
offset = (addr - EIOINTC_ISR_START) / 4;
- p = s->isr + offset * 4;
+ p = (void *)s->isr + offset * 4;
break;
case EIOINTC_COREISR_START ... EIOINTC_COREISR_END:
if (cpu >= s->num_cpu)
return -EINVAL;
offset = (addr - EIOINTC_COREISR_START) / 4;
- p = s->coreisr[cpu] + offset * 4;
+ p = (void *)s->coreisr[cpu] + offset * 4;
break;
case EIOINTC_COREMAP_START ... EIOINTC_COREMAP_END:
offset = (addr - EIOINTC_COREMAP_START) / 4;
- p = s->coremap + offset * 4;
+ p = (void *)s->coremap + offset * 4;
break;
default:
kvm_err("%s: unknown eiointc register, addr = %d\n", __func__, addr);
base-commit: c369299895a591d96745d6492d4888259b004a9e
--
2.39.3
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH] LoongArch: KVM: Fix base address calculation problem in kvm_eiointc_regs_access()
2026-03-24 3:15 [PATCH] LoongArch: KVM: Fix base address calculation problem in kvm_eiointc_regs_access() Bibo Mao
@ 2026-03-26 7:50 ` Huacai Chen
0 siblings, 0 replies; 2+ messages in thread
From: Huacai Chen @ 2026-03-26 7:50 UTC (permalink / raw)
To: Bibo Mao; +Cc: Aurelien Jarno, kvm, loongarch, linux-kernel, stable
Applied, thanks.
Huacai
On Tue, Mar 24, 2026 at 11:15 AM Bibo Mao <maobibo@loongson.cn> wrote:
>
> In function kvm_eiointc_regs_access(), register base address is caculated
> from array base address plus offset, the offset is absolute value from base
> address. The data type of array base address is u64, it should be converted
> into void * type and then plus the offset.
>
> Cc: <stable@vger.kernel.org>
> Fixes: d3e43a1f34ac ("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>
> ---
> arch/loongarch/kvm/intc/eiointc.c | 14 +++++++-------
> 1 file changed, 7 insertions(+), 7 deletions(-)
>
> diff --git a/arch/loongarch/kvm/intc/eiointc.c b/arch/loongarch/kvm/intc/eiointc.c
> index d2acb4d09e73..71bd67b57338 100644
> --- a/arch/loongarch/kvm/intc/eiointc.c
> +++ b/arch/loongarch/kvm/intc/eiointc.c
> @@ -472,34 +472,34 @@ static int kvm_eiointc_regs_access(struct kvm_device *dev,
> switch (addr) {
> case EIOINTC_NODETYPE_START ... EIOINTC_NODETYPE_END:
> offset = (addr - EIOINTC_NODETYPE_START) / 4;
> - p = s->nodetype + offset * 4;
> + p = (void *)s->nodetype + offset * 4;
> break;
> case EIOINTC_IPMAP_START ... EIOINTC_IPMAP_END:
> offset = (addr - EIOINTC_IPMAP_START) / 4;
> - p = &s->ipmap + offset * 4;
> + p = (void *)&s->ipmap + offset * 4;
> break;
> case EIOINTC_ENABLE_START ... EIOINTC_ENABLE_END:
> offset = (addr - EIOINTC_ENABLE_START) / 4;
> - p = s->enable + offset * 4;
> + p = (void *)s->enable + offset * 4;
> break;
> case EIOINTC_BOUNCE_START ... EIOINTC_BOUNCE_END:
> offset = (addr - EIOINTC_BOUNCE_START) / 4;
> - p = s->bounce + offset * 4;
> + p = (void *)s->bounce + offset * 4;
> break;
> case EIOINTC_ISR_START ... EIOINTC_ISR_END:
> offset = (addr - EIOINTC_ISR_START) / 4;
> - p = s->isr + offset * 4;
> + p = (void *)s->isr + offset * 4;
> break;
> case EIOINTC_COREISR_START ... EIOINTC_COREISR_END:
> if (cpu >= s->num_cpu)
> return -EINVAL;
>
> offset = (addr - EIOINTC_COREISR_START) / 4;
> - p = s->coreisr[cpu] + offset * 4;
> + p = (void *)s->coreisr[cpu] + offset * 4;
> break;
> case EIOINTC_COREMAP_START ... EIOINTC_COREMAP_END:
> offset = (addr - EIOINTC_COREMAP_START) / 4;
> - p = s->coremap + offset * 4;
> + p = (void *)s->coremap + offset * 4;
> break;
> default:
> kvm_err("%s: unknown eiointc register, addr = %d\n", __func__, addr);
>
> base-commit: c369299895a591d96745d6492d4888259b004a9e
> --
> 2.39.3
>
>
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2026-03-26 7:50 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-03-24 3:15 [PATCH] LoongArch: KVM: Fix base address calculation problem in kvm_eiointc_regs_access() Bibo Mao
2026-03-26 7:50 ` Huacai Chen
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox