[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [win-pv-devel] [PATCH 3/3] Avoid incorrecly extending checksum accumulator
It was noticed that checksums were occasionally being incorrectly verified. The reason for this turned out to be that the value passed to ChecksumVerify as a USHORT was being extended to ULONG prior to being inverted, thus leaving bits 16-31 set and thus an overflow from the lower bits was not being correctly folded. Signed-off-by: Ben Chalmers <ben.chalmers@xxxxxxxxxx> Signed-off-by: Paul Durrant <paul.durrant@xxxxxxxxxx> --- src/xenvif/checksum.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/xenvif/checksum.c b/src/xenvif/checksum.c index 5f9c800..19a9616 100644 --- a/src/xenvif/checksum.c +++ b/src/xenvif/checksum.c @@ -87,6 +87,12 @@ ChecksumVerify( { ULONG Accumulator = ~Calculated; + // + // MSVC extends Calculated to ULONG prior to inverting it + // so we must explicitly zero out the upper half + // + Accumulator &= 0xFFFF; + // See RFC 1624, section 5 __AccumulateChecksum(&Accumulator, (PUCHAR)&Embedded, sizeof (USHORT)); -- 2.1.1 _______________________________________________ win-pv-devel mailing list win-pv-devel@xxxxxxxxxxxxxxxxxxxx http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |