Re: [PATCH] vsock/virtio: fix kernel panic from virtio_transport_reset_no_sock

From: Stefan Hajnoczi
Date: Wed Mar 06 2019 - 12:02:22 EST


On Wed, Mar 06, 2019 at 11:10:41AM +0200, Adalbert LazÄr wrote:
> On Wed, 6 Mar 2019 08:41:04 +0000, Stefan Hajnoczi <stefanha@xxxxxxxxx> wrote:
> > On Tue, Mar 05, 2019 at 08:01:45PM +0200, Adalbert LazÄr wrote:
> > The pkt argument is the received packet that we must reply to.
> > The reply packet is allocated just before line 680 and must be free
> > explicitly for return -ENOTCONN.
> >
> > You can avoid the leak and make the code easier to read like this:
> >
> > struct virtio_vsock_pkt *reply;
> >
> > ...
> >
> > ------ avoid reusing 'pkt'
> > v
> > reply = virtio_transport_alloc_pkt(&info, 0, ...);
> > if (!reply)
> > return -ENOMEM;
> >
> > t = virtio_transport_get_ops();
> > if (!t) {
> > virtio_transport_free_pkt(reply); <-- prevent memory leak
> > return -ENOTCONN;
> > }
> > return t->send_pkt(reply);
>
> What do you think about Stefano's suggestion, to move the check above
> the line were the reply is allocated?

That's fine too.

However a follow up patch to eliminate the confusing way that 'pkt' is
reused is still warranted. If you are busy I'd be happy to send that
cleanup.

Stefan

Attachment: signature.asc
Description: PGP signature