]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
LoongArch: KVM: Add address alignment check in pch_pic register access
authorBibo Mao <maobibo@loongson.cn>
Wed, 20 Aug 2025 14:51:15 +0000 (22:51 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 28 Aug 2025 14:34:31 +0000 (16:34 +0200)
commit 538c06e3964a8e94b645686cc58ccc4a06fa6330 upstream.

With pch_pic device, its register is based on MMIO address space,
different access size 1/2/4/8 is supported. And base address should
be naturally aligned with its access size, here add alignment check
in its register access emulation function.

Cc: stable@vger.kernel.org
Signed-off-by: Bibo Mao <maobibo@loongson.cn>
Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
arch/loongarch/kvm/intc/pch_pic.c

index 08fce845f66803adb7b4a63e7ffedc1f32202018..ef5044796b7a6ed98c6b4fc7e3cd883244eaa059 100644 (file)
@@ -195,6 +195,11 @@ static int kvm_pch_pic_read(struct kvm_vcpu *vcpu,
                return -EINVAL;
        }
 
+       if (addr & (len - 1)) {
+               kvm_err("%s: pch pic not aligned addr %llx len %d\n", __func__, addr, len);
+               return -EINVAL;
+       }
+
        /* statistics of pch pic reading */
        vcpu->kvm->stat.pch_pic_read_exits++;
        ret = loongarch_pch_pic_read(s, addr, len, val);
@@ -302,6 +307,11 @@ static int kvm_pch_pic_write(struct kvm_vcpu *vcpu,
                return -EINVAL;
        }
 
+       if (addr & (len - 1)) {
+               kvm_err("%s: pch pic not aligned addr %llx len %d\n", __func__, addr, len);
+               return -EINVAL;
+       }
+
        /* statistics of pch pic writing */
        vcpu->kvm->stat.pch_pic_write_exits++;
        ret = loongarch_pch_pic_write(s, addr, len, val);