[OpenAFS-devel] Corrupted ticket sent in rx packet from Windows
1.3.7700
Douglas E. Engert
deengert@anl.gov
Wed, 19 Jan 2005 11:36:30 -0600
Tesing on Solaris with 1.3.77 and a few printf statments shows
your fix is only part of the solution. The other part is that on the second time
in the loop, the (offset - l) must be zero, so the next chunck of the data
is copied to the beginning of the next iov_base. Otherwise it is copied
before the iov_base overlaying something!
This would explain the cache manager acting up some times requiring a reboot.
So far I can get the client side to send the correct data but the server
still has problems with the ticket. It apearsto to have the same problem with
(offset - l) and out += j.
But it looks like on the server side the data that gets overlayed will
be in "out", so only this response will fail. I am seeing a
Unknown code asn1 6 (1859794438) which would mean the ticket was overlayed.
I will try and thest this in our test AFS cell.
--- ,rx_packet.c Tue Dec 7 00:10:06 2004
+++ rx_packet.c Wed Jan 19 11:14:21 2005
@@ -192,6 +192,8 @@
memcpy(out, (char *)(packet->wirevec[i].iov_base) + (offset - l), j);
resid -= j;
l += packet->wirevec[i].iov_len;
+ offset = l;
+ out += j;
i++;
}
@@ -232,6 +234,8 @@
memcpy(b, in, j);
resid -= j;
l += packet->wirevec[i].iov_len;
+ offset = l;
+ in += j;
i++;
}
Jeffrey Altman wrote:
> correction:
>
> Index: rx_packet.c
> ===================================================================
> RCS file: /var/lib/cvs/openafs-1319/src/rx/rx_packet.c,v
> retrieving revision 1.1.1.1.2.1
> diff -u -r1.1.1.1.2.1 rx_packet.c
> --- rx_packet.c 5 Jan 2005 21:15:51 -0000 1.1.1.1.2.1
> +++ rx_packet.c 19 Jan 2005 04:54:53 -0000
> @@ -191,6 +191,7 @@
> j = MIN(resid, packet->wirevec[i].iov_len - (offset - l));
> memcpy(out, (char *)(packet->wirevec[i].iov_base) + (offset -
> l), j);
> resid -= j;
> + out += j;
> l += packet->wirevec[i].iov_len;
> i++;
> }
> @@ -231,6 +232,7 @@
> j = MIN(resid, packet->wirevec[i].iov_len - (offset - l));
> memcpy(b, in, j);
> resid -= j;
> + in += j;
> l += packet->wirevec[i].iov_len;
> i++;
> }
>
--
Douglas E. Engert <DEEngert@anl.gov>
Argonne National Laboratory
9700 South Cass Avenue
Argonne, Illinois 60439
(630) 252-5444