Hi,On Tue, Aug 21, 2018 at 03:18:35AM -0400, Frediano Ziglio wrote:Hi,On Fri, 2018-08-17 at 15:24 +0200, Victor Toso wrote:Hi,On Fri, Aug 17, 2018 at 03:12:35PM +0200, jorge.olmos@xxxxxxxxxxxwrote:From: Jorge Olmos <jorge.olmos@xxxxxxxxxxx>When building spice-gtk for windows:- libusb uses __stdcall calling convention when compiled for win32.It doesnot include an option to be compiled with __cdecl callingconvention.Directly calling libusb functions works fine. But it is a problemwhen itsfunctions are passed as callbacks to a function that expects othercallingconvention.- glib uses __cdecl calling convention and expects the functions itreceives as parameters to follow __cdecl convention.So the lines included in spice-gtk like:g_clear_pointer(&priv->device, libusb_unref_device);cause libusb_unref_device (compiled with _stdcall convention) to becalledwith __cdecl convention. This causes stack corruption, and hencecrashes.Have you raised a bug in glib? We use this libraries to help withportability so I'd hope it is possible to fix in glib.I don't think it is even possible to fix this cleanly in glib. Acompilation of glib can work well with __stdcall OR with __cdecl. Butnot with both of them.It's possible, the function is called just once in the macro so won'tneed all the hackish casts that are currently present. I have a fixedversion of the macro (somewhere!).Ah, that would be cool.Right now I have just found another patch in spice-gtk, where the sameproblem was solved with the same solution, which also has noportability issues:https://patchwork.freedesktop.org/patch/92705/Yes, this problem can cause a stack corruption (as you confirmed) andshould be merged GLib or not.Yes, not against merging the fix. But if we can get it fixed inGlib, it is matter to help other projects that port code towindows to be fixed as well, etc.Please open a bug in Glib and add a reference to it in the code
(to avoid people reverting this change while the bug is not fixedthere)https://gitlab.gnome.org/GNOME/glib/issuesCheers,Victor---src/channel-usbredir.c | 9 ++++++---1 file changed, 6 insertions(+), 3 deletions(-)diff --git a/src/channel-usbredir.c b/src/channel-usbredir.cindex 6ffe546..1d9c380 100644--- a/src/channel-usbredir.c+++ b/src/channel-usbredir.c@@ -352,7 +352,8 @@ static void spice_usbredir_channel_open_acl_cb(spice_usbredir_channel_open_device(channel, &err);}if (err) {- g_clear_pointer(&priv->device, libusb_unref_device);+ libusb_unref_device(priv->device);+ priv->device = NULL;g_boxed_free(spice_usb_device_get_type(), priv-spice_device);priv->spice_device = NULL;priv->state = STATE_DISCONNECTED;@@ -383,7 +384,8 @@ _open_device_async_cb(GTask *task,spice_usbredir_channel_lock(channel);if (!spice_usbredir_channel_open_device(channel, &err)) {- g_clear_pointer(&priv->device, libusb_unref_device);+ libusb_unref_device(priv->device);+ priv->device = NULL;g_boxed_free(spice_usb_device_get_type(), priv-spice_device);priv->spice_device = NULL;}@@ -504,7 +506,8 @@ voidspice_usbredir_channel_disconnect_device(SpiceUsbredirChannel*channel)/* This also closes the libusb handle we passed fromopen_device */usbredirhost_set_device(priv->host, NULL);- g_clear_pointer(&priv->device, libusb_unref_device);+ libusb_unref_device(priv->device);+ priv->device = NULL;g_boxed_free(spice_usb_device_get_type(), priv-spice_device);priv->spice_device = NULL;priv->state = STATE_DISCONNECTED;Frediano_______________________________________________Spice-devel mailing listSpice-devel@xxxxxxxxxxxxxxxxxxxxxhttps://lists.freedesktop.org/mailman/listinfo/spice-devel
--
Javier Celaya Alastrué Chief Technology Officer |
+34696969959 j_celaya |
Política de confidencialidad Este mensaje y los ficheros anexos son confidenciales dirigiéndose exclusivamente al destinatario mencionado en el encabezamiento. Si usted ha recibido este correo por error, tenga la amabilidad de eliminarlo de su sistema y no divulgar el contenido a terceros. Los datos personales facilitados por usted o por terceros serán tratados por FLEXIBLE SOFTWARE SOLUTIONS S.L.U. con la finalidad de gestionar y mantener los contactos y relaciones que se produzcan como consecuencia de la relación que mantiene con FLEXIBLE SOFTWARE SOLUTIONS S.L.U. Normalmente, la base jurídica que legitima este tratamiento, será su consentimiento, el interés legítimo o la necesidad para gestionar una relación contractual o similar. El plazo de conservación de sus datos vendrá determinado por la relación que mantiene con nosotros. Para más información al respecto, o para ejercer sus derechos de acceso, rectificación, supresión, oposición, limitación o portabilidad, dirija una comunicación por escrito a FLEXIBLE SOFTWARE SOLUTIONS S.L.U: Avenida de Ranillas 1D, Planta 3, Oficina 3G, Zaragoza o al correo electrónico pdo@xxxxxxxxxxx. En caso de considerar vulnerado su derecho a la protección de datos personales, podrá interponer una reclamación ante la Agencia Española de Protección de Datos (www.agpd.es). |
_______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/spice-devel