potential bug in David Brownell's zcip code
Michael Schmidt <[email protected]> Wed, 22 Dec 2004 15:39:12 +0100
| Newsgroups | gmane.network.zeroconf.workers |
|---|---|
| Organization | University of Siegen |
| Message-ID | <[email protected]> |
--Boundary-00=_QcYyBUr8+X8FPU6
Content-Type: multipart/signed;
boundary="nextPart5337519.frD07uXYOW";
protocol="application/pgp-signature";
micalg=pgp-sha1
Content-Transfer-Encoding: 7bit
--nextPart5337519.frD07uXYOW
Content-Type: text/plain;
charset="iso-8859-1"
Content-Transfer-Encoding: base64
Content-Disposition: inline
SGksCgpOb3cgdGhhdCBJJ20gc2VlaW5nIGEgYml0IGNsZWFyZXIgYWJvdXQgdGhlIGxlZ2FsIHN0
YXR1cyBvZiBEYXZpZCBCcm93bmVsbCdzIAp6Y2lwIGNvZGUsIEknZCBsaWtlIHRvIGRpc2N1c3Mg
YSBwb3RlbnRpYWwgYnVnIEkgaGF2ZSBkaXNjb3ZlcmVkIHJlY2VudGx5LiAKVGhlIGJ1ZyBpcyBh
Ym91dCB0aW1lIG1lYXN1cmVtZW50IGFuZCB0aW1lL3RpbWVvdXQgY2FsY3VsYXRpb24gYW5kIApy
ZWNhbGN1bGF0aW9uIGFyb3VuZCB0aGUgY2FsbCB0byAncG9sbCgpJy4gCgpCdXQgZmlyc3QsIGxl
dCBtZSBleHBsYWluIGhvdyBJIHVuZGVyc3RhbmQgY2VydGFpbiBwYXJ0cyBvZiB0aGUgY29kZToK
CjEuIG1lYW5pbmcgb2YgJ3R2MSc6CgqgoKCgoKCgoGlmICh0aW1lb3V0ID4gMCkgewqgoKCgoKCg
oKCgoKCgoKCgZ2V0dGltZW9mZGF5KCZ0djEsIE5VTEwpOwqgoKCgoKCgoKCgoKCgoKCgdHYxLnR2
X3VzZWMgKz0gKHRpbWVvdXQgJSAxMDAwKSAqIDEwMDA7CqCgoKCgoKCgoKCgoKCgoKBpZiAodHYx
LnR2X3VzZWMgPiAxMDAwMDAwKSB7CqCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoHR2MS50dl91c2Vj
IC09IDEwMDAwMDA7CqCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoHR2MS50dl9zZWMrKzsKoKCgoKCg
oKCgoKCgoKCgoH0KoKCgoKCgoKCgoKCgoKCgoHR2MS50dl9zZWMgKz0gdGltZW91dCAvIDEwMDA7
CqCgoKCgoKCgfSBlbHNlIGlmICh0aW1lb3V0ID09IDApIHsKoKCgoKCgoKCgoKCgoKCgoHRpbWVv
dXQgPSBtc19yZGVsYXkoUFJPQkVfV0FJVCk7CgondHYxJyBzZWVtcyB0byBiZSB0aGUgdGltZW91
dCBmb3IgdGhlIHN1YnNlcXVlbnQgY2FsbCB0byAncG9sbCgpJyBhcyAKImFic29sdXRlIiB0aW1l
IHZhbHVlIGZvciBmaW5pdGUsIG5vbi16ZXJvIHRpbWVvdXRzLgoKCjIuIGludGVycHJldGF0aW9u
IG9mICdwb2xsKCknIHJldHVybiBjb2RlczoKCqCgoKCgoKCgc3dpdGNoIChwb2xsKGZkcywgMSwg
dGltZW91dCkpIHsKCqCgoKCgoKCgLy8gdGltZW91dHMgdHJpZ2dlciBwcm90b2NvbCB0cmFuc2l0
aW9ucwqgoKCgoKCgoGNhc2UgMDoKoKCgoKCgoKAuCqCgoKCgoKCgLqCgoKCgoKCgoKCgoKCgoC8q
IHRoaXMgaXMgdGhlICd0aW1lb3V0JyBicmFuY2ggKi8KoKCgoKCgoKAuCqCgoKCgoKCgYnJlYWs7
CgqgoKCgoKCgoC8vIHBhY2tldHMgYXJyaXZpbmcKoKCgoKCgoKBjYXNlIDE6CqCgoKCgoKCgLgqg
oKCgoKCgoC6goKCgoKCgoKCgoKCgoKAvKiB0aGlzIGlzIHRoZSAncGFja2V0IGhhcyBhcnJpdmVk
JyBicmFuY2ggKi8KoKCgoKCgoKAuCqCgoKCgoKCgYnJlYWs7CgqgoKCgoKCgoGRlZmF1bHQ6CqCg
oKCgoKCgLgqgoKCgoKCgoC6goKCgoKCgoKCgoKCgoKAvKiB0aGlzIGlzIHRoZSAnZXJyb3InIGJy
YW5jaCAqLwqgoKCgoKCgoC4KCgozLiByZWNhbGN1bGF0aW9uIG9mIHRpbWVvdXQgaW4gJ3BhY2tl
dCBoYXMgYXJyaXZlZCcgYnJhbmNoOgoKoKCgoKCgoKCgoKCgoKCgoC8vIG1heWJlIGFkanVzdCB0
aW1lb3V0CqCgoKCgoKCgoKCgoKCgoKBpZiAodGltZW91dCA+IDApIHsKoKCgoKCgoKCgoKCgoKCg
oKCgoKCgoKCgc3RydWN0IHRpbWV2YWwgdHYyOwoKoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgZ2V0
dGltZW9mZGF5KCZ0djIsIE5VTEwpOwqgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKBpZiAodGltZXJj
bXAoJnR2MSwgJnR2MiwgPCkpIHsKoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKB0aW1l
b3V0ID0gLTE7CqCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoH0gZWxzZSB7CqCgoKCgoKCgoKCgoKCg
oKCgoKCgoKCgoKCgoKCgoKCgdGltZXJzdWIoJnR2MSwgJnR2MiwgJnR2MSk7CqCgoKCgoKCgoKCg
oKCgoKCgoKCgoKCgoKCgoKCgoKCgdGltZW91dCA9IDEwMDAgKiB0djEudHZfc2VjCqCgoKCgoKCg
oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoCsgdHYxLnR2X3VzZWMgLyAx
MDAwOwqgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKB9CqCgoKCgoKCgoKCgoKCgoKB9CgondHYyJyBp
cyB0aGUgdGltZSB3aGVuIHRoZSBwcm90b2NvbCBoYXMgcmV0dXJuZWQgZnJvbSAncG9sbCgpJy4g
QXBwYXJlbnRseSwgCnRoZSBjb2RlIGNhbGN1bGF0ZXMgdGhlIHRpbWUgZGlmZmVyZW5jZSBiZXR3
ZWVuIHRoZSBleHBlY3RlZCwgYWJzb2x1dGUgZXhwaXJ5IAp0aW1lICgndHYxJykgYW5kIHRoZSBj
dXJyZW50IHRpbWUgKCd0djInKS4gSWYgdGhlIGN1cnJlbnQgdGltZSBpcyBncmVhdGVyLCAKdGhl
IGNvZGUgc2VlbXMgdG8gYXNzdW1lIHRoYXQgdGhlIHRpbWVvdXQgaGFzIGVsYXBzZWQuIEluIHRo
aXMgY2FzZSwgdGhlIGNvZGUgCmFsc28gYXNzdW1lcyB0aGF0IHRoZSBwcm90b2NvbCBuZWdvdGlh
dGlvbiBwaGFzZSAoUFJPQkUvQU5OT1VOQ0UpIGlzIG92ZXIsIAphbmQgaXQgbWF5IGdvIGludG8g
YW4gaW5maW50ZSB3YWl0IHN0YXRlIHdoZXJlIGl0IHdvdWxkIG9ubHkgZGVmZW5kIHRoZSAKc3Vj
Y2Vzc2Z1bGx5IGFjcXVpcmVkIElQIGFkZHJlc3MgaWYgbmVjZXNzYXJ5LiAKClRoZXJlIGFyZSB0
d28gcHJvYmxlbXMgd2l0aCB0aGlzOgoKYSkKV2hlbiB0aGUgY29kZSBpcyBpbiB0aGUgJ3BhY2tl
dCBoYXMgYXJyaXZlZCcgYnJhbmNoLCB0aGUgdGltZW91dCBjYW5ub3QgaGF2ZSAKZWxhcHNlZCBi
eSBkZWZpbml0aW9uIG9mICdwb2xsKCknLiBFeGNlZWRpbmcgb2YgdGhlIHRpbWVvdXQgbGVhZHMg
aW50byAKdGhlICd0aW1lb3V0JyBicmFuY2guCgpiKQpUaGlzIGNvZGUgbWF5IGVycm9uZW91c2x5
IGFzc3VtZSB0aGF0IHRoZSB0aW1lb3V0IGhhcyBlbGFwc2VkLCBpZiBhbiAKdW5leHBlY3RlZCBB
UlAgcGFja2V0IGFycml2ZXMgd2l0aGluIHRoZSByZWd1bGFyLCBmaW5pdGUgdGltZW91dCAoc3Rp
bGwgaW4gCnRoZSBwcm90b2NvbCBuZWdvdGlhdGlvbiBwaGFzZSksIGFuZCB0aGUgT1MgcHJlZW1w
dHMgdGhlIHpjaXAgY29kZSBiZXR3ZWVuIAp0aGUgcmV0dXJuIG9mICdwb2xsKCknIGFuZCB0aGUg
dGltZW91dCByZWNhbGN1bGF0aW9uIGFib3ZlLiBXaGVuIHRoZSBjb2RlIGlzIApyZWFjdGl2YXRl
ZCBieSB0aGUgc2NoZWR1bGVyLCB0aGUgdGltZW91dCBtYXkgaW5kZWVkIGhhdmUgZWxhcHNlZCwg
YW5kIAondGltZXJjbXAoJnR2MSwgJnR2MiwgPCknIHdpbGwgaG9sZCB0cnVlLiBJbiB0aGlzIGNh
c2UsIHRoZSBjb2RlIHdpbGwgCmVycm9uZW91c2x5IGFzc3VtZSB0aGF0IHRoZSBwcm90b2NvbCBu
ZWdvdGlhdGlvbiBwaGFzZSBpcyBmaW5pc2hlZCwgYW5kIHdpbGwgCnNldCB0aGUgc3Vic2VxdWVu
dCB0aW1lb3V0IHRvIC0xIChpbmZpbml0ZSkuIHpjaXAgd2lsbCBzZWVtIHRvIGhhbmcuCgoKSSBj
YW4gcmVwcm9kdWNlIHRoaXMgcHJvYmxlbSBoZXJlIG1vcmUgb3IgbGVzcyBjb25zaXN0ZW50bHkg
YnkgZXhlY3V0aW5nIHpjaXAgCm9uIG1vcmUgdGhhbiBvbmUgbm9kZSBjb25jdXJyZW50bHksIHNv
IHRoYXQgInVuZXhwZWN0ZWQiIEFSUCByZXF1ZXN0IHBhY2tldHMgCmFyZSByZWNlaXZlZCB3aXRo
aW4gdGhlIHByb3RvY29sIG5lZ290aWF0aW9uIHBoYXNlLgoKCkkgaGF2ZSBmaXhlZCB0aGUgcHJv
YmxlbSBieSByZXBsYWNpbmcgJ3BvbGwoKScgd2l0aCAnc2VsZWN0KCknIGFuZCBieSAKc2ltcGxp
ZnlpbmcgdGhlIHRpbWVvdXQgcmVjYWxjdWxhdGlvbiAod2hpY2ggaXMgYW4gb2J2aW91cyBjb25z
ZXF1ZW5jZSBvZiAKdXNpbmcgJ3NlbGVjdCgpJy4gJ3NlbGVjdCgpJyByZXR1cm5zIHdpdGggdGhl
IHRpbWVvdXQgcGFyYW1ldGVyIGNvbnRhaW5pbmcgCnRoZSByZW1haW5pbmcgdGltZW91dCB2YWx1
ZSB3aGVuIGl0IGlzIHdva2VuIHVwIGJ5IGEgcGFja2V0IGJlZm9yZSB0aGUgCnRpbWVvdXQgaGFz
IGVsYXBzZWQuIFRoaXMgdmFsdWUgY2FuIGRpcmVjdGx5IGJlIHVzZWQgZm9yIHJlLWludm9raW5n
IAonc2VsZWN0KCknLiBQbGVhc2Ugbm90ZSB0aGF0IHRoaXMgYmVoYXZpb3IgaXMgb25seSBpbXBs
ZW1lbnRlZCBpbiBMaW51eCwgYnV0IApub3QgaW4gb3RoZXIgVW5pY2VzLCBzbyB0aGF0IG15IHBh
dGNoIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggb3RoZXIgVW5pY2VzLgoKTXkgcGF0Y2gsIHdoaWNo
IGFwcGxpZXMgdG8gRGF2aWQgQnJvd25lbGwncyBpbml0aWFsIGNvZGUgcG9zdGluZyBvbiAKemVy
b2NvbmYtd29ya2VycyBmcm9tIDI2LzEwLzA0LCBpcyBhdHRhY2hlZC4KCgpBbnkgY29tbWVudHM/
Pz8KCgpNaWNoYWVsCgoKLS0gCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ck1pY2hhZWwgU2NobWlkdAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQpJbnN0aXR1dGUgZm9yIERpZ2l0YWwgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcwpV
bml2ZXJzaXR5IG9mIFNpZWdlbiwgR2VybWFueQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQpodHRwOiAgIHd3dy5kY3MudW5pLXNpZWdlbi5kZQplLW1haWw6IHNj
aG1pZHRAbnVlLmV0LWluZi51bmktc2llZ2VuLmRlCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Cgo=
--nextPart5337519.frD07uXYOW
Content-Type: application/pgp-signature
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.5 (GNU/Linux)
iD8DBQBByYcQQxcxBvLsRaoRAgGyAJ9uR7g+56QjEK24g+OfbR4n9fPXsQCgqa6U
clpOk/g7i9oITEaHALkJ074=
=1UZo
-----END PGP SIGNATURE-----
--nextPart5337519.frD07uXYOW--
--Boundary-00=_QcYyBUr8+X8FPU6
Content-Type: text/x-diff;
charset="iso-8859-1";
name="zcip.patch"
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
filename="zcip.patch"
--- zcip.c.orig 2004-12-20 17:09:12.000000000 +0100
+++ zcip.c 2004-12-22 10:29:02.717064544 +0100
@@ -369,28 +369,28 @@
// - use it
// - defend it, within limits
while (1) {
- struct pollfd fds[1];
- struct timeval tv1;
+ fd_set rfds, efds;
+ struct timeval to, *pto;
- fds[0].fd = fd;
- fds[0].events = POLLIN | POLLERR;
- fds[0].revents = 0;
+ FD_ZERO(&rfds);
+ FD_SET(fd, &rfds);
+ FD_ZERO(&efds);
+ FD_SET(fd, &efds);
// poll, being ready to adjust current timeout
- if (timeout > 0) {
- gettimeofday(&tv1, NULL);
- tv1.tv_usec += (timeout % 1000) * 1000;
- if (tv1.tv_usec > 1000000) {
- tv1.tv_usec -= 1000000;
- tv1.tv_sec++;
- }
- tv1.tv_sec += timeout / 1000;
- } else if (timeout == 0) {
+ if (timeout == 0) {
timeout = ms_rdelay(PROBE_WAIT);
}
VDBG("...wait %ld %s nprobes=%d, nclaims=%d\n",
timeout, intf, nprobes, nclaims);
- switch (poll(fds, 1, timeout)) {
+ if (timeout == -1)
+ pto = NULL;
+ else {
+ to.tv_sec = timeout / 1000;
+ to.tv_usec = (timeout % 1000) * 1000;
+ pto = &to;
+ }
+ switch (select(fd + 1, &rfds, NULL, &efds, pto)) {
// timeouts trigger protocol transitions
case 0:
@@ -437,19 +437,10 @@
case 1:
// maybe adjust timeout
if (timeout > 0) {
- struct timeval tv2;
-
- gettimeofday(&tv2, NULL);
- if (timercmp(&tv1, &tv2, <)) {
- timeout = -1;
- } else {
- timersub(&tv1, &tv2, &tv1);
- timeout = 1000 * tv1.tv_sec
- + tv1.tv_usec / 1000;
- }
+ timeout = to.tv_sec * 1000 + to.tv_usec / 1000;
}
- if ((fds[0].revents & POLLIN) == 0) {
- if (fds[0].revents & POLLERR) {
+ if (FD_ISSET(fd, &rfds) == 0) {
+ if (FD_ISSET(fd, &efds) != 0) {
// FIXME: links routinely go down;
// this shouldn't necessarily exit.
fprintf(stderr, "%s %s: poll error\n",
--Boundary-00=_QcYyBUr8+X8FPU6--
-------------------------------------------------------
SF email is sponsored by - The IT Product Guide
Read honest & candid reviews on hundreds of IT Products from real users.
Discover which products truly live up to the hype. Start reading now.
http://productguide.itmanagersjournal.com/