From 5025b70fae9ab2d79deac9e08d806a85c339ddbe Mon Sep 17 00:00:00 2001 From: Håkon Nessjøen Date: Sun, 3 Oct 2010 03:46:35 +0200 Subject: Fix invalid counter sizes which would break connection after 65535 bytes of data in one direction --- mactelnet.c | 2 +- mactelnet.h | 2 +- main.c | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/mactelnet.c b/mactelnet.c index 2acc1c4..8030b49 100644 --- a/mactelnet.c +++ b/mactelnet.c @@ -26,7 +26,7 @@ unsigned char mt_mactelnet_cpmagic[4] = { 0x56, 0x34, 0x12, 0xff }; -int initPacket(struct mt_packet *packet, unsigned char ptype, unsigned char *srcmac, unsigned char *dstmac, unsigned short sessionkey, unsigned short counter) { +int initPacket(struct mt_packet *packet, unsigned char ptype, unsigned char *srcmac, unsigned char *dstmac, unsigned short sessionkey, unsigned int counter) { unsigned char *data = packet->data; /* Packet version */ diff --git a/mactelnet.h b/mactelnet.h index d992de4..91e17e8 100644 --- a/mactelnet.h +++ b/mactelnet.h @@ -65,7 +65,7 @@ struct mt_packet { unsigned char data[MT_PACKET_LEN]; }; -extern int initPacket(struct mt_packet *packet, unsigned char ptype, unsigned char *srcmac, unsigned char *dstmac, unsigned short sessionkey, unsigned short counter); +extern int initPacket(struct mt_packet *packet, unsigned char ptype, unsigned char *srcmac, unsigned char *dstmac, unsigned short sessionkey, unsigned int counter); extern int addControlPacket(struct mt_packet *packet, char cptype, void *cpdata, int data_len); extern void parsePacket(unsigned char *data, struct mt_mactelnet_hdr *pkthdr); extern int parseControlPacket(unsigned char *data, const int data_len, struct mt_mactelnet_control_hdr *cpkthdr); diff --git a/main.c b/main.c index 545c317..cea231d 100644 --- a/main.c +++ b/main.c @@ -40,8 +40,8 @@ int sockfd; int deviceIndex; -int outcounter = 0; -int incounter = 0; +unsigned int outcounter = 0; +unsigned int incounter = 0; int sessionkey = 0; int running = 1; @@ -152,7 +152,7 @@ void handlePacket(unsigned char *data, int data_len) { /* Accept first packet, and all packets greater than incounter, and if counter has wrapped around. */ - if (incounter == 0 || pkthdr.counter > incounter || incounter - pkthdr.counter > 32768) { + if (incounter == 0 || pkthdr.counter > incounter || (incounter - pkthdr.counter) > 65535) { incounter = pkthdr.counter; } else { /* Ignore double or old packets */ -- cgit v1.2.3