Hi Peter,

On Fri, May 08, 2026 at 10:15:10AM +0100, Peter Maydell wrote:
> On Wed, 29 Apr 2026 at 19:35, Harsh Prateek Bora <[email protected]> 
> wrote:
> >
> > From: Aditya Gupta <[email protected]>
> >
> > Set the "Thread Register State Entry Size" that is required by firmware
> > (OPAL), to know size of memory to allocate to capture CPU state, in the
> > event of a crash
> >
> > Reviewed-by: Hari Bathini <[email protected]>
> > Reviewed-by: Sourabh Jain <[email protected]>
> > Signed-off-by: Aditya Gupta <[email protected]>
> > Tested-by: Shivang Upadhyay <[email protected]>
> > Link: 
> > https://lore.kernel.org/qemu-devel/[email protected]
> > Signed-off-by: Harsh Prateek Bora <[email protected]>
> 
> Hi; Coverity points out an issue with this change (CID 1658041):

Thanks for reporting, I'll look into this.
> 
> >  static void pnv_reset(MachineState *machine, ResetType type)
> >  {
> > +    PnvMachineState *pnv = PNV_MACHINE(machine);
> >      void *fdt;
> >
> >      qemu_devices_reset(type);
> >
> > +    if (!pnv->mpipl_state.is_next_boot_mpipl) {
> > +        /*
> > +         * Set the "Thread Register State Entry Size", so that firmware can
> > +         * allocate enough memory to capture CPU state in the event of a
> > +         * crash
> > +         */
> > +
> > +        MpiplProcDumpArea proc_area;
> 
> Here we don't initialize the struct...
> 
> > +
> > +        proc_area.version = PROC_DUMP_AREA_VERSION_P9;
> > +        proc_area.thread_size = 
> > cpu_to_be32(sizeof(MpiplPreservedCPUState));
> > +
> > +        /* These are to be allocated & assigned by the firmware */
> > +        proc_area.alloc_addr = 0;
> > +        proc_area.alloc_size = 0;
> > +
> > +        /* These get assigned after crash, when QEMU preserves the 
> > registers */
> > +        proc_area.dest_addr = 0;
> > +        proc_area.act_size = 0;
> 
> ...and here we don't fill in all the fields; we don't set
> the reserved, reserved2 or reserved3 fields to anything.
> This means that we will write data to the guest which is
> potentially random host data from the stack.
> 
> I think I'd suggest fixing this by initializing the struct in
> one go, like this:
> 
>     MpiplProcDumpArea proc_area = {
>        .version = PROC_DUMP_AREA_VERSION_P9,
>        .thread_size = cpu_to_be32(sizeof(MpiplPreservedCPUState)),
>        [set alloc_addr = 0 etc here if you like, or rely on
>         the "fields not listed are zero-inited"]
>     };
> 
> (In fact because we use -ftrivial-auto-var-init=zero the compiler
> will zero init this for us anyway, but we can make Coverity
> happy anyway.)

Thanks for suggesting the fix too.

~Shivang.

Reply via email to