Message ID | 1470201769-12344-1-git-send-email-i.maximets@samsung.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Hi On Wed, Aug 3, 2016 at 9:25 AM Ilya Maximets <i.maximets@samsung.com> wrote: > 'vhost_set_vring_enable()' tries to call function using pointer to > 'vhost_ops' which can be already zeroized in 'vhost_dev_cleanup()' > while vhost disconnection. > > Fix that by checking 'vhost_ops' before using. This fixes QEMU crash > on calling 'ethtool -L eth0 combined 2' if vhost disconnected. > > Signed-off-by: Ilya Maximets <i.maximets@samsung.com> > --- > hw/net/vhost_net.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/hw/net/vhost_net.c b/hw/net/vhost_net.c > index dc61dc1..f2d49ad 100644 > --- a/hw/net/vhost_net.c > +++ b/hw/net/vhost_net.c > @@ -428,7 +428,7 @@ int vhost_set_vring_enable(NetClientState *nc, int > enable) > > nc->vring_enable = enable; > > - if (vhost_ops->vhost_set_vring_enable) { > + if (vhost_ops && vhost_ops->vhost_set_vring_enable) { > return vhost_ops->vhost_set_vring_enable(&net->dev, enable); > } > would be nice for 2.7, Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com> > > -- > 2.7.4 > > > -- Marc-André Lureau
Hi On Wed, Aug 3, 2016 at 12:37 PM Marc-André Lureau < marcandre.lureau@gmail.com> wrote: > Hi > > On Wed, Aug 3, 2016 at 9:25 AM Ilya Maximets <i.maximets@samsung.com> > wrote: > >> 'vhost_set_vring_enable()' tries to call function using pointer to >> 'vhost_ops' which can be already zeroized in 'vhost_dev_cleanup()' >> while vhost disconnection. >> >> Fix that by checking 'vhost_ops' before using. This fixes QEMU crash >> on calling 'ethtool -L eth0 combined 2' if vhost disconnected. >> >> Signed-off-by: Ilya Maximets <i.maximets@samsung.com> >> --- >> hw/net/vhost_net.c | 2 +- >> 1 file changed, 1 insertion(+), 1 deletion(-) >> >> diff --git a/hw/net/vhost_net.c b/hw/net/vhost_net.c >> index dc61dc1..f2d49ad 100644 >> --- a/hw/net/vhost_net.c >> +++ b/hw/net/vhost_net.c >> @@ -428,7 +428,7 @@ int vhost_set_vring_enable(NetClientState *nc, int >> enable) >> >> nc->vring_enable = enable; >> >> - if (vhost_ops->vhost_set_vring_enable) { >> + if (vhost_ops && vhost_ops->vhost_set_vring_enable) { >> return vhost_ops->vhost_set_vring_enable(&net->dev, enable); >> } >> > > would be nice for 2.7, > Michael, could you pick the fix for 2.7? thanks > > Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com> > >> >> -- >> 2.7.4 >> >> >> -- > Marc-André Lureau >
diff --git a/hw/net/vhost_net.c b/hw/net/vhost_net.c index dc61dc1..f2d49ad 100644 --- a/hw/net/vhost_net.c +++ b/hw/net/vhost_net.c @@ -428,7 +428,7 @@ int vhost_set_vring_enable(NetClientState *nc, int enable) nc->vring_enable = enable; - if (vhost_ops->vhost_set_vring_enable) { + if (vhost_ops && vhost_ops->vhost_set_vring_enable) { return vhost_ops->vhost_set_vring_enable(&net->dev, enable); }
'vhost_set_vring_enable()' tries to call function using pointer to 'vhost_ops' which can be already zeroized in 'vhost_dev_cleanup()' while vhost disconnection. Fix that by checking 'vhost_ops' before using. This fixes QEMU crash on calling 'ethtool -L eth0 combined 2' if vhost disconnected. Signed-off-by: Ilya Maximets <i.maximets@samsung.com> --- hw/net/vhost_net.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)