qemu-discuss
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Segfault in hw/scsi/scsi-disk.c caused by null pointer


From: Peter Maydell
Subject: Re: Segfault in hw/scsi/scsi-disk.c caused by null pointer
Date: Fri, 12 Aug 2022 15:50:25 +0100

On Fri, 12 Aug 2022 at 15:41, Denis Krienbühl <denis@href.ch> wrote:
>
> I’m not much further with my segfault, though I now know that the number of 
> detaches likely does not matter and it seems to occur during the attach, not 
> the detach part of the code.
>
> I adapted my change to be a bit more sane - I think it might make sense in 
> general, as something is clearly wrong, the code can be reached somehow and 
> in this case we probably just want to stop, instead of pretending everything 
> is okay.
>
> So the following change also works for us, causing no segfaults:
>
> diff --git a/hw/scsi/scsi-disk.c b/hw/scsi/scsi-disk.c
> index efee6739f9..7273cd6c3d 100644
> --- a/hw/scsi/scsi-disk.c
> +++ b/hw/scsi/scsi-disk.c
> @@ -775,6 +775,15 @@ static int scsi_disk_emulate_inquiry(SCSIRequest *req, 
> uint8_t *outbuf)
>          return -1;
>      }
>
> +    /* Avoid null-pointers leading to segfaults below */
> +    if (!s->version) {
> +        return -1;
> +    }
> +
> +    if (!s->vendor) {
> +        return -1;
> +    }
> +
>      /* PAGE CODE == 0 */
>      buflen = req->cmd.xfer;
>      if (buflen > SCSI_MAX_INQUIRY_LEN) {
>
> I still hope to get some feedback from anyone that is familiar with hw/scsi. 
> Hopefully this reaches someone who can shed some light on this.

As I said previously, this is still absolutely wrong.
If we ever get to this function with either of these
fields being NULL then there has been a serious problem,
probably a memory corruption or use-after-free, or
possibly an attempt to use a partially constructed object.

You need to find out why these fields have ended up NULL,
not just paper over the problem.

You could put in
  assert(s->version);
  assert(s->vendor);

if you like, though that doesn't really gain much over
just segfaulting.

thanks
-- PMM



reply via email to

[Prev in Thread] Current Thread [Next in Thread]