[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] [qemu-xen-traditional stable-4.5] rtl8139: check IP Header Length field



commit a9e97f6f85cfe0dca81be665d3285a80630cdbb8
Author:     Stefan Hajnoczi <stefanha@xxxxxxxxxx>
AuthorDate: Wed Jul 15 18:17:01 2015 +0100
Commit:     Ian Jackson <Ian.Jackson@xxxxxxxxxxxxx>
CommitDate: Tue May 10 19:15:54 2016 +0100

    rtl8139: check IP Header Length field
    
    The IP Header Length field was only checked in the IP checksum case, but
    is used in other cases too.
    
    Signed-off-by: Stefan Hajnoczi <stefanha@xxxxxxxxxx>
    [Backport to qemu-xen-tradition]
    Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
---
 hw/rtl8139.c | 18 ++++++++----------
 1 file changed, 8 insertions(+), 10 deletions(-)

diff --git a/hw/rtl8139.c b/hw/rtl8139.c
index 75ef9b4..b71ea62 100644
--- a/hw/rtl8139.c
+++ b/hw/rtl8139.c
@@ -2139,6 +2139,10 @@ static int rtl8139_cplus_transmit_one(RTL8139State *s)
             }
 
             hlen = IP_HEADER_LENGTH(ip);
+            if (hlen < sizeof(ip_header) || hlen > eth_payload_len) {
+                goto skip_offload;
+            }
+
             ip_protocol = ip->ip_p;
             ip_data_len = be16_to_cpu(ip->ip_len) - hlen;
 
@@ -2146,16 +2150,10 @@ static int rtl8139_cplus_transmit_one(RTL8139State *s)
             {
                 DEBUG_PRINT(("RTL8139: +++ C+ mode need IP checksum\n"));
 
-                if (hlen<sizeof(ip_header) || hlen>eth_payload_len) {/* min 
header length */
-                    /* bad packet header len */
-                    /* or packet too short */
-                }
-                else
-                {
-                    ip->ip_sum = 0;
-                    ip->ip_sum = ip_checksum(ip, hlen);
-                    DEBUG_PRINT(("RTL8139: +++ C+ mode IP header len=%d 
checksum=%04x\n", hlen, ip->ip_sum));
-                }
+                ip->ip_sum = 0;
+                ip->ip_sum = ip_checksum(ip, hlen);
+                DEBUG_PRINT(("RTL8139: +++ C+ mode IP header len=%d 
checksum=%04x\n",
+                             hlen, ip->ip_sum));
             }
 
             if ((txdw0 & CP_TX_LGSEN) && ip_protocol == IP_PROTO_TCP)
--
generated by git-patchbot for /home/xen/git/qemu-xen-traditional.git#stable-4.5

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.