[pkg-wine-party] Bug#836911: /usr/bin/winecfg-development: winecfg-development is a fork bomb

Jens Reyer jre.winesim at gmail.com
Fri Sep 9 16:51:58 UTC 2016


On 07.09.2016 20:27, Jens Reyer wrote:
> I think I can reproduce this: Wine starts a
> wineserver which all other Wine processes connect to. This wineserver
> has to be from the same build as the connecting process. Now if wine
> (stable)'s wineserver is already running and I then start
> wine-development I can observe this issue.

It seems that in the Debian packaging SERVER_PROTOCOL_VERSION is always
1, and thus the check if server and clients match doesn't work.

Testing between Debian's and winehq's versions I get e.g.:

$ /usr/lib/wine-development/wine winecfg
$ /usr/lib/wine-development/wine winecfg
--> OK, 2 winecfg windows

$ /usr/lib/wine/wine winecfg
$ /usr/lib/wine-development/wine winecfg
--> fork bomb (use "wineserver -k" to avoid system crash)

$ /opt/wine-devel/bin/wine winecfg
$ /usr/lib/wine/wine winecfg
wine client error:0: version mismatch 515/1.
Your wine binary was not upgraded correctly,
or you have an older one somewhere in your PATH.
Or maybe the wrong wineserver is still running?
--> OK, mismatch detected

$ /opt/wine-devel/bin/wine winecfg
$ /opt/wine-staging/bin/wine winecfg
wine client error:0: version mismatch 515/516.
Your wineserver binary was not upgraded correctly,
or you have an older one somewhere in your PATH.
Or maybe the wrong wineserver is still running?
--> OK, mismatch detected



Attached patch is a dirty workaround for this, by always setting the
SERVER_PROTOCOL_VERSION to 2. So if we apply this to e.g.
src:wine-development, but not to src:wine, it will be detected if a
client tries to connect to a mismatching wineserver from the other set:

$ /usr/lib/wine-development/wine winecfg
$ /usr/lib/wine/wine winecfg
wine client error:0: version mismatch 2/1.
Your wine binary was not upgraded correctly,
or you have an older one somewhere in your PATH.
Or maybe the wrong wineserver is still running?
--> OK, mismatch detected



However this workaround doesn't catch any version incompatibilities.

So far I found that:

internally SERVER_PROTOCOL_VERSION is SERVER_PROT.

tools/make_requests puts this in include/wine/server_protocol.h.new

include/wine/server_protocol.h in git has:
#define SERVER_PROTOCOL_VERSION 515
This number seems to be updated with every relevant change.

I assume generate/request.patch is incomplete, and needs to be fixed to
correctly produce the right SERVER_PROTOCOL_VERSION. But I don't know if
I can come up with a real fix. Any help would be appreciated!



Other diagnosis (dead ends):

- /tmp/.wine-$uid gets created.
- I removed all /usr/bin/wine* and replaced the wineserver script
  by the binary to rule out the alternatives system and our
  scripts/link setup as reason for this.
  But I assume the alternatives system just led people to playing
  with wine and wine-development, which exposed this bug much
  more, see also #836566.
- I built without the shlib-exit-calls.patch.

Greets
jre
-------------- next part --------------
A non-text attachment was scrubbed...
Name: patch0.patch
Type: text/x-patch
Size: 942 bytes
Desc: not available
URL: <http://lists.alioth.debian.org/pipermail/pkg-wine-party/attachments/20160909/cab600e8/attachment.bin>


More information about the pkg-wine-party mailing list