slirp: Fix use after release on tcp_input
authorJan Kiszka <jan.kiszka@siemens.com>
Mon, 26 Sep 2011 19:29:56 +0000 (21:29 +0200)
committerJan Kiszka <jan.kiszka@siemens.com>
Wed, 28 Sep 2011 11:10:22 +0000 (13:10 +0200)
ti points into the m buffer. But the latter may already be released
right after the dodata: label. Move the test before the potential
release.

Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
slirp/tcp_input.c

index 2f1a196..942aaf4 100644 (file)
@@ -1157,6 +1157,16 @@ step6:
 dodata:
 
        /*
+        * If this is a small packet, then ACK now - with Nagel
+        *      congestion avoidance sender won't send more until
+        *      he gets an ACK.
+        */
+       if (ti->ti_len && (unsigned)ti->ti_len <= 5 &&
+           ((struct tcpiphdr_2 *)ti)->first_char == (char)27) {
+               tp->t_flags |= TF_ACKNOW;
+       }
+
+       /*
         * Process the segment text, merging it into the TCP sequencing queue,
         * and arranging for acknowledgment of receipt if necessary.
         * This process logically involves adjusting tp->rcv_wnd as data
@@ -1235,18 +1245,6 @@ dodata:
        }
 
        /*
-        * If this is a small packet, then ACK now - with Nagel
-        *      congestion avoidance sender won't send more until
-        *      he gets an ACK.
-        *
-        * See above.
-        */
-       if (ti->ti_len && (unsigned)ti->ti_len <= 5 &&
-           ((struct tcpiphdr_2 *)ti)->first_char == (char)27) {
-               tp->t_flags |= TF_ACKNOW;
-       }
-
-       /*
         * Return any desired output.
         */
        if (needoutput || (tp->t_flags & TF_ACKNOW)) {