From Didier Gautheron: fix desegmentation code to handle sequence number
overflow. svn path=/trunk/; revision=7169
This commit is contained in:
parent
23ed899373
commit
63bd8087e5
3
AUTHORS
3
AUTHORS
|
@ -1230,7 +1230,8 @@ Didier Gautheron <dgautheron[AT]magic.fr> {
|
|||
Fix to work with automake 1.7
|
||||
Fix gtk Makefile entry to rebuild "ethereal-tap-register.c"
|
||||
Fix handling of cross in TCP graph code
|
||||
Fix sequence number overflow problems in TCP graph code
|
||||
Fix sequence number overflow problems in TCP graph code and
|
||||
desegmentation code
|
||||
}
|
||||
|
||||
Phil Williams <csypbw[AT]comp.leeds.ac.uk> {
|
||||
|
|
18
packet-tcp.c
18
packet-tcp.c
|
@ -1,7 +1,7 @@
|
|||
/* packet-tcp.c
|
||||
* Routines for TCP packet disassembly
|
||||
*
|
||||
* $Id: packet-tcp.c,v 1.171 2003/01/28 23:56:40 guy Exp $
|
||||
* $Id: packet-tcp.c,v 1.172 2003/02/18 21:37:53 guy Exp $
|
||||
*
|
||||
* Ethereal - Network traffic analyzer
|
||||
* By Gerald Combs <gerald@ethereal.com>
|
||||
|
@ -163,11 +163,11 @@ struct tcp_unacked {
|
|||
};
|
||||
|
||||
/* Idea for gt: either x > y, or y is much bigger (assume wrap) */
|
||||
#define GT_SEQ(x, y) ((gint32)(y - x) < 0)
|
||||
#define LT_SEQ(x, y) ((gint32)(x - y) < 0)
|
||||
#define GE_SEQ(x, y) ((gint32)(y - x) <= 0)
|
||||
#define LE_SEQ(x, y) ((gint32)(x - y) <= 0)
|
||||
#define EQ_SEQ(x, y) (x == y)
|
||||
#define GT_SEQ(x, y) ((gint32)((y) - (x)) < 0)
|
||||
#define LT_SEQ(x, y) ((gint32)((x) - (y)) < 0)
|
||||
#define GE_SEQ(x, y) ((gint32)((y) - (x)) <= 0)
|
||||
#define LE_SEQ(x, y) ((gint32)((x) - (y)) <= 0)
|
||||
#define EQ_SEQ(x, y) ((x) == (y))
|
||||
|
||||
static GMemChunk *tcp_acked_chunk = NULL;
|
||||
static int tcp_acked_count = 5000; /* one for almost every other segment in the capture */
|
||||
|
@ -1040,7 +1040,7 @@ desegment_tcp(tvbuff_t *tvb, packet_info *pinfo, int offset,
|
|||
tcp_fragment_table,
|
||||
seq - tsk->start_seq,
|
||||
nxtseq - seq,
|
||||
(nxtseq < (tsk->start_seq + tsk->tot_len)) );
|
||||
(LT_SEQ (nxtseq,tsk->start_seq + tsk->tot_len)) );
|
||||
|
||||
if(!ipfd_head){
|
||||
/* fragment_add() returned NULL, This means that
|
||||
|
@ -1105,7 +1105,7 @@ desegment_tcp(tvbuff_t *tvb, packet_info *pinfo, int offset,
|
|||
* Note that the last segment may include more than what
|
||||
* we needed.
|
||||
*/
|
||||
if(nxtseq >= (tsk->start_seq + tsk->tot_len)){
|
||||
if(GE_SEQ(nxtseq, tsk->start_seq + tsk->tot_len)){
|
||||
/*
|
||||
* OK, this is the last segment.
|
||||
* Let's call the subdissector with the desegmented
|
||||
|
@ -1305,7 +1305,7 @@ desegment_tcp(tvbuff_t *tvb, packet_info *pinfo, int offset,
|
|||
tcp_fragment_table,
|
||||
tsk->seq - tsk->start_seq,
|
||||
nxtseq - tsk->start_seq,
|
||||
(nxtseq < tsk->start_seq + tsk->tot_len));
|
||||
LT_SEQ (nxtseq, tsk->start_seq + tsk->tot_len));
|
||||
|
||||
/* this is the next segment in the sequence we want */
|
||||
new_tsk = g_mem_chunk_alloc(tcp_segment_key_chunk);
|
||||
|
|
Loading…
Reference in New Issue