Selaa lähdekoodia

[tcp] Avoid setting PSH flag when SYN flag is set

Some firewall devices seem to regard SYN,PSH as an invalid flag
combination and reject the packet.  Fix by setting PSH only if SYN is
not set.

Reported-by: DSE Incorporated <dseinc@gmail.com>
tags/v0.9.8
Michael Brown 16 vuotta sitten
vanhempi
commit
3ed468e0c5
1 muutettua tiedostoa jossa 3 lisäystä ja 1 poistoa
  1. 3
    1
      src/net/tcp.c

+ 3
- 1
src/net/tcp.c Näytä tiedosto

471
 		tsopt->tsopt.tsval = ntohl ( currticks() );
471
 		tsopt->tsopt.tsval = ntohl ( currticks() );
472
 		tsopt->tsopt.tsecr = ntohl ( tcp->ts_recent );
472
 		tsopt->tsopt.tsecr = ntohl ( tcp->ts_recent );
473
 	}
473
 	}
474
+	if ( ! ( flags & TCP_SYN ) )
475
+		flags |= TCP_PSH;
474
 	tcphdr = iob_push ( iobuf, sizeof ( *tcphdr ) );
476
 	tcphdr = iob_push ( iobuf, sizeof ( *tcphdr ) );
475
 	memset ( tcphdr, 0, sizeof ( *tcphdr ) );
477
 	memset ( tcphdr, 0, sizeof ( *tcphdr ) );
476
 	tcphdr->src = tcp->local_port;
478
 	tcphdr->src = tcp->local_port;
478
 	tcphdr->seq = htonl ( tcp->snd_seq );
480
 	tcphdr->seq = htonl ( tcp->snd_seq );
479
 	tcphdr->ack = htonl ( tcp->rcv_ack );
481
 	tcphdr->ack = htonl ( tcp->rcv_ack );
480
 	tcphdr->hlen = ( ( payload - iobuf->data ) << 2 );
482
 	tcphdr->hlen = ( ( payload - iobuf->data ) << 2 );
481
-	tcphdr->flags = ( flags | TCP_PSH );
483
+	tcphdr->flags = flags;
482
 	tcphdr->win = htons ( tcp->rcv_win );
484
 	tcphdr->win = htons ( tcp->rcv_win );
483
 	tcphdr->csum = tcpip_chksum ( iobuf->data, iob_len ( iobuf ) );
485
 	tcphdr->csum = tcpip_chksum ( iobuf->data, iob_len ( iobuf ) );
484
 
486
 

Loading…
Peruuta
Tallenna