Message ID | 20240508074457.12367-4-sgarzare@redhat.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | vhost-user: support any POSIX system (tested on macOS, FreeBSD, OpenBSD) | expand |
On 8/5/24 09:44, Stefano Garzarella wrote: > libvhost-user will panic when receiving VHOST_USER_GET_INFLIGHT_FD > message if MFD_ALLOW_SEALING is not defined, since it's not able > to create a memfd. > > VHOST_USER_GET_INFLIGHT_FD is used only if > VHOST_USER_PROTOCOL_F_INFLIGHT_SHMFD is negotiated. So, let's mask > that feature if the backend is not able to properly handle these > messages. > > Signed-off-by: Stefano Garzarella <sgarzare@redhat.com> > --- > subprojects/libvhost-user/libvhost-user.c | 10 ++++++++++ > 1 file changed, 10 insertions(+) > > diff --git a/subprojects/libvhost-user/libvhost-user.c b/subprojects/libvhost-user/libvhost-user.c > index a11afd1960..1c361ffd51 100644 > --- a/subprojects/libvhost-user/libvhost-user.c > +++ b/subprojects/libvhost-user/libvhost-user.c > @@ -1674,6 +1674,16 @@ vu_get_protocol_features_exec(VuDev *dev, VhostUserMsg *vmsg) > features |= dev->iface->get_protocol_features(dev); > } > Maybe move the #ifndef here? > + /* > + * If MFD_ALLOW_SEALING is not defined, we are not able to handle > + * VHOST_USER_GET_INFLIGHT_FD messages, since we can't create a memfd. > + * Those messages are used only if VHOST_USER_PROTOCOL_F_INFLIGHT_SHMFD > + * is negotiated. A device implementation can enable it, so let's mask > + * it to avoid a runtime panic. > + */ > +#ifndef MFD_ALLOW_SEALING > + features &= ~(1ULL << VHOST_USER_PROTOCOL_F_INFLIGHT_SHMFD); > +#endif > vmsg_set_reply_u64(vmsg, features); > return true; > } Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> Tested-by: Philippe Mathieu-Daudé <philmd@linaro.org>
On Wed, May 08, 2024 at 12:39:33PM GMT, Philippe Mathieu-Daudé wrote: >On 8/5/24 09:44, Stefano Garzarella wrote: >>libvhost-user will panic when receiving VHOST_USER_GET_INFLIGHT_FD >>message if MFD_ALLOW_SEALING is not defined, since it's not able >>to create a memfd. >> >>VHOST_USER_GET_INFLIGHT_FD is used only if >>VHOST_USER_PROTOCOL_F_INFLIGHT_SHMFD is negotiated. So, let's mask >>that feature if the backend is not able to properly handle these >>messages. >> >>Signed-off-by: Stefano Garzarella <sgarzare@redhat.com> >>--- >> subprojects/libvhost-user/libvhost-user.c | 10 ++++++++++ >> 1 file changed, 10 insertions(+) >> >>diff --git a/subprojects/libvhost-user/libvhost-user.c b/subprojects/libvhost-user/libvhost-user.c >>index a11afd1960..1c361ffd51 100644 >>--- a/subprojects/libvhost-user/libvhost-user.c >>+++ b/subprojects/libvhost-user/libvhost-user.c >>@@ -1674,6 +1674,16 @@ vu_get_protocol_features_exec(VuDev *dev, VhostUserMsg *vmsg) >> features |= dev->iface->get_protocol_features(dev); >> } > >Maybe move the #ifndef here? Yep, I'll do. > >>+ /* >>+ * If MFD_ALLOW_SEALING is not defined, we are not able to handle >>+ * VHOST_USER_GET_INFLIGHT_FD messages, since we can't create a memfd. >>+ * Those messages are used only if VHOST_USER_PROTOCOL_F_INFLIGHT_SHMFD >>+ * is negotiated. A device implementation can enable it, so let's mask >>+ * it to avoid a runtime panic. >>+ */ >>+#ifndef MFD_ALLOW_SEALING >>+ features &= ~(1ULL << VHOST_USER_PROTOCOL_F_INFLIGHT_SHMFD); >>+#endif >> vmsg_set_reply_u64(vmsg, features); >> return true; >> } > >Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> >Tested-by: Philippe Mathieu-Daudé <philmd@linaro.org> > Thanks, Stefano
diff --git a/subprojects/libvhost-user/libvhost-user.c b/subprojects/libvhost-user/libvhost-user.c index a11afd1960..1c361ffd51 100644 --- a/subprojects/libvhost-user/libvhost-user.c +++ b/subprojects/libvhost-user/libvhost-user.c @@ -1674,6 +1674,16 @@ vu_get_protocol_features_exec(VuDev *dev, VhostUserMsg *vmsg) features |= dev->iface->get_protocol_features(dev); } + /* + * If MFD_ALLOW_SEALING is not defined, we are not able to handle + * VHOST_USER_GET_INFLIGHT_FD messages, since we can't create a memfd. + * Those messages are used only if VHOST_USER_PROTOCOL_F_INFLIGHT_SHMFD + * is negotiated. A device implementation can enable it, so let's mask + * it to avoid a runtime panic. + */ +#ifndef MFD_ALLOW_SEALING + features &= ~(1ULL << VHOST_USER_PROTOCOL_F_INFLIGHT_SHMFD); +#endif vmsg_set_reply_u64(vmsg, features); return true; }
libvhost-user will panic when receiving VHOST_USER_GET_INFLIGHT_FD message if MFD_ALLOW_SEALING is not defined, since it's not able to create a memfd. VHOST_USER_GET_INFLIGHT_FD is used only if VHOST_USER_PROTOCOL_F_INFLIGHT_SHMFD is negotiated. So, let's mask that feature if the backend is not able to properly handle these messages. Signed-off-by: Stefano Garzarella <sgarzare@redhat.com> --- subprojects/libvhost-user/libvhost-user.c | 10 ++++++++++ 1 file changed, 10 insertions(+)