From: Alex Williamson Date: Fri, 5 Nov 2010 20:52:08 +0000 (-0600) Subject: e1000: Fix TCP checksum overflow with TSO X-Git-Tag: TizenStudio_2.0_p2.3~3861^2~28 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=449648944ec063c008f90dcfeb529f3932469161;p=sdk%2Femulator%2Fqemu.git e1000: Fix TCP checksum overflow with TSO When adding the length to the pseudo header, we're not properly accounting for overflow. From: Mark Wu Signed-off-by: Alex Williamson Signed-off-by: Michael S. Tsirkin --- diff --git a/hw/e1000.c b/hw/e1000.c index 532efdc..677165f 100644 --- a/hw/e1000.c +++ b/hw/e1000.c @@ -384,9 +384,12 @@ xmit_seg(E1000State *s) } else // UDP cpu_to_be16wu((uint16_t *)(tp->data+css+4), len); if (tp->sum_needed & E1000_TXD_POPTS_TXSM) { + unsigned int phsum; // add pseudo-header length before checksum calculation sp = (uint16_t *)(tp->data + tp->tucso); - cpu_to_be16wu(sp, be16_to_cpup(sp) + len); + phsum = be16_to_cpup(sp) + len; + phsum = (phsum >> 16) + (phsum & 0xffff); + cpu_to_be16wu(sp, phsum); } tp->tso_frames++; }