2297 lines · 30.3 KB · Text
RawDownload
diff -e ip.orig/arp.c ip/arp.c643c	QUNLOCK(arp);.613,614c	RUNLOCK(ifc);	QLOCK(arp);.609c	QUNLOCK(arp);	/* for icmpns */.589c		if((a->rxtsrem <= 0) || !(CANRLOCK(ifc)) || (a->ifcid != ifc->ifcid)){.574c	QLOCK(arp);.557c		QUNLOCK(arp);.554c		QLOCK(arp);.511c		QUNLOCK(arp);.481c		QLOCK(arp);.444c		QUNLOCK(arp);.426c		QLOCK(arp);.398c	QUNLOCK(arp);.380c					RUNLOCK(ifc);.375c					RLOCK(ifc);.372c						RUNLOCK(ifc);.366c			QUNLOCK(arp);.337c	QLOCK(arp);.292c	QUNLOCK(arp);.260c	QUNLOCK(arp);.258carprelease(Arp *arp, Arpent* ae).250c	QUNLOCK(arp);.219c	QLOCK(arp);.50cint 	ReTransTimer = RETRANS_TIMER;.48c#define haship(s) ((ulong)((s)[IPaddrlen-1])%NHASH).36c	QLock	qlock;.14d6c#include "error.h".2c#include "lib.h".diff -e ip.orig/chandial.c ip/chandial.c6,7c#include	"error.h"#include	"ip/ip.h".2c#include	"lib.h".diff -e ip.orig/devip.c ip/devip.c1430c	QUNLOCK(c);.1418c		QUNLOCK(c);.1404,1411c		QUNLOCK(c);.1399c	QLOCK(c);.1349c	QUNLOCK(c);.1326,1328d1322,1323d1318c			QUNLOCK(c);.1310c		if(CANQLOCK(c)){.1294c			QLOCK(c);.1185c		QUNLOCK(c);.1130c			QUNLOCK(c);.1128c		QLOCK(c);.1033c	QLOCK(c);.1029c		QLOCK(c);.1027c	QUNLOCK(c);.980c	QLOCK(c);.976c		QLOCK(c);.974c	QUNLOCK(c);.831c	QUNLOCK(p);.820,826c	QUNLOCK(p);.793c	QLOCK(p);.765c	QUNLOCK(p);.760c			QUNLOCK(p);.748c	QLOCK(p);.582c	QUNLOCK(cv);.561c		QUNLOCK(cv);.558c	QLOCK(cv);.516cipremove(Chan* _).510cipcreate(Chan* _, char* __, int ___, ulong ____).494c			QUNLOCK(cv);.487c			QLOCK(cv);.470c		QUNLOCK(cv);.468c		QLOCK(cv);.447,448c		QUNLOCK(cv);		QUNLOCK(p);.431,432c			QUNLOCK(cv);			QUNLOCK(p);.429c		QLOCK(cv);.427c		QLOCK(p);.415c		QUNLOCK(p);.411c			QUNLOCK(p);.409c		QLOCK(p);.174cipgen(Chan *c, char* __ch, Dirtab* __dt, int __i, int s, Dir *dp).50c#define QID(p, c, y) 	( ((uint)(p)<<(Shiftproto)) | ((uint)(c)<<Shiftconv) | (y) ).6,7c#include	"error.h"#include	"ip/ip.h".2c#include	"lib.h".diff -e ip.orig/esp.c ip/esp.c1106a  #ifdef notdefenum {	RC4forward= 10*1024*1024,	/* maximum skip forward */	RC4back = 100*1024,	/* maximum look back */}; typedef struct Esprc4 Esprc4;struct Esprc4{	ulong	cseq;		/* current byte sequence number */	RC4state current; 	int	ovalid;		/* old is valid */	ulong	lgseq;		/* last good sequence */	ulong	oseq;		/* old byte sequence number */	RC4state old;}; static void rc4espinit(Espcb *ecb, char *name, uchar *k, int n); static intrc4cipher(Espcb *ecb, uchar *p, int n){	Esprc4 *esprc4;	RC4state tmpstate;	ulong seq;	long d, dd; 	if(n < 4)		return 0; 	esprc4 = ecb->espstate;	if(ecb->incoming) {		seq = nhgetl(p);		p += 4;		n -= 4;		d = seq-esprc4->cseq;		if(d == 0) {			rc4(&esprc4->current, p, n);			esprc4->cseq += n;			if(esprc4->ovalid) {				dd = esprc4->cseq - esprc4->lgseq;				if(dd > RC4back)					esprc4->ovalid = 0;			}		} else if(d > 0) {print("esp rc4cipher: missing packet: %uld %ld\n", seq, d); /* this link is hosed */			if(d > RC4forward) {				strcpy(up->errstr, "rc4cipher: skipped too much");				return 0;			}			esprc4->lgseq = seq;			if(!esprc4->ovalid) {				esprc4->ovalid = 1;				esprc4->oseq = esprc4->cseq;				memmove(&esprc4->old, &esprc4->current,					sizeof(RC4state));			}			rc4skip(&esprc4->current, d);			rc4(&esprc4->current, p, n);			esprc4->cseq = seq+n;		} else {print("esp rc4cipher: reordered packet: %uld %ld\n", seq, d);			dd = seq - esprc4->oseq;			if(!esprc4->ovalid || -d > RC4back || dd < 0) {				strcpy(up->errstr, "rc4cipher: too far back");				return 0;			}			memmove(&tmpstate, &esprc4->old, sizeof(RC4state));			rc4skip(&tmpstate, dd);			rc4(&tmpstate, p, n);			return 1;		} 		/* move old state up */		if(esprc4->ovalid) {			dd = esprc4->cseq - RC4back - esprc4->oseq;			if(dd > 0) {				rc4skip(&esprc4->old, dd);				esprc4->oseq += dd;			}		}	} else {		hnputl(p, esprc4->cseq);		p += 4;		n -= 4;		rc4(&esprc4->current, p, n);		esprc4->cseq += n;	}	return 1;} static voidrc4espinit(Espcb *ecb, char *name, uchar *k, int n){	Esprc4 *esprc4; 	/* bits to bytes */	n = (n+7)>>3;	esprc4 = smalloc(sizeof(Esprc4));	memset(esprc4, 0, sizeof(Esprc4));	setupRC4state(&esprc4->current, k, n);	ecb->espalg = name;	ecb->espblklen = 4;	ecb->espivlen = 4;	ecb->cipher = rc4cipher;	ecb->espstate = esprc4;}#endif.1056,1081d1048,1050c	ecb->espblklen = 8;	ecb->espivlen = 8;.1045c	for(i=0; i<8; i++).1040,1042c	/* bits to bytes */	n = (n+7)>>3;	if(n > 8)		n = 8;.1037c	uchar key[8], ivec[8];.1035cdesespinit(Espcb *ecb, char *name, uchar *k, int n).1019,1033d1013,1014c		memmove(p, ds->ivec, 8);		for(p += 8; p < ep; p += 8){			pp = p;			ip = ds->ivec;			for(eip = ip+8; ip < eip; )				*pp++ ^= *ip++;			block_cipher(ds->expanded, p, 0);			memmove(ds->ivec, p, 8);		}.1010,1011c		memmove(ds->ivec, p, 8);		p += 8;		while(p < ep){			memmove(tmp, p, 8);			block_cipher(ds->expanded, p, 1);			tp = tmp;			ip = ds->ivec;			for(eip = ip+8; ip < eip; ){				*p++ ^= *ip;				*ip++ = *tp++;			}		}.1008a	ep = p + n;.1006a	uchar tmp[8];	uchar *pp, *tp, *ip, *eip, *ep;.999,1003d993c	ecb->ahlen = 12;.990c	klen >>= 3;		/* convert to bytes */ .986cmd5ahinit(Espcb *ecb, char *name, uchar *key, int klen).979c	seanq_hmac_md5(hash, t, tlen, (uchar*)ecb->ahstate, 16);.968c	digest = md5(opad, 64, nil, nil);.966c	digest = md5(ipad, 64, nil, nil);.959,962c	for(i=0; i<64; i++){		ipad[i] = 0x36;		opad[i] = 0x5c;	}	ipad[64] = opad[64] = 0;	for(i=0; i<klen; i++){.957a	uchar innerhash[MD5dlen];.956d954a	uchar ipad[65], opad[65];.796,952cvoid.790c	ecb->ahlen = 12;.786c	klen >>= 8;		/* convert to bytes */.782cshaahinit(Espcb *ecb, char *name, uchar *key, int klen).775c	seanq_hmac_sha1(hash, t, tlen, (uchar*)ecb->ahstate, 16);.772a	int r;.771d764c	digest = sha1(opad, 64, nil, nil);.762c	digest = sha1(ipad, 64, nil, nil);.755,758c	for(i=0; i<64; i++){		ipad[i] = 0x36;		opad[i] = 0x5c;	}	ipad[64] = opad[64] = 0;	for(i=0; i<klen; i++){.753a	uchar innerhash[SHA1dlen];.752d750a	uchar ipad[65], opad[65];.743,748cvoid.735cnullahinit(Espcb *ecb, char *name, uchar* _, int __).729cnullauth(Espcb* _, uchar* __, int ___, uchar* ____).720cnullespinit(Espcb *ecb, char *name, uchar* _, int __).714cnullcipher(Espcb* _, uchar* __, int ___).708,712d647c	QUNLOCK(c);.642c	QLOCK(c);.632c	QUNLOCK(c);.627c	QLOCK(c);.606c	QUNLOCK(esp);.

Lines 1–500 of 2297.