On Mon, 18 Jul 2022 13:47:34 +0530 Nikunj A Dadhania <nik...@amd.com> wrote:
> Currently it is possible to start a guest with memory that is beyond > the addressable range of CPU and QEMU does not even warn about it. > The default phys_bits is 40 and can address 1TB. However it allows to > start a guest with greater than 1TB memory. > > Prevent this by erroring out in such a scenario. > > Reported-by: Shaju Abraham <abraham.sh...@amd.com> > Signed-off-by: Nikunj A Dadhania <nik...@amd.com> Following shall care of your issue: https://www.mail-archive.com/qemu-devel@nongnu.org/msg900136.html > --- > target/i386/cpu.c | 10 ++++++++++ > 1 file changed, 10 insertions(+) > > diff --git a/target/i386/cpu.c b/target/i386/cpu.c > index 6a57ef13af..1afbdbac7d 100644 > --- a/target/i386/cpu.c > +++ b/target/i386/cpu.c > @@ -6376,6 +6376,7 @@ static void x86_cpu_hyperv_realize(X86CPU *cpu) > > static void x86_cpu_realizefn(DeviceState *dev, Error **errp) > { > + MachineState *machine = MACHINE(qdev_get_machine()); > CPUState *cs = CPU(dev); > X86CPU *cpu = X86_CPU(dev); > X86CPUClass *xcc = X86_CPU_GET_CLASS(dev); > @@ -6541,6 +6542,15 @@ static void x86_cpu_realizefn(DeviceState *dev, Error > **errp) > } > } > > + if (BIT_ULL(cpu->phys_bits) < machine->maxram_size) { > + error_setg(&local_err, "cannot setup guest memory: " > + "%s memory(%lu MiB) exceeds addressable limit(%llu MiB)", > + machine->maxram_size == machine->ram_size ? "" : "max", > + machine->maxram_size / MiB, > + BIT_ULL(cpu->phys_bits) / MiB); > + goto out; > + } > + > /* Cache information initialization */ > if (!cpu->legacy_cache) { > if (!xcc->model || !xcc->model->cpudef->cache_info) {