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. Load more
diff -e ip.orig/arp.c ip/arp.c 643c 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); . 258c arprelease(Arp *arp, Arpent* ae) . 250c QUNLOCK(arp); . 219c QLOCK(arp); . 50c int ReTransTimer = RETRANS_TIMER; . 48c #define haship(s) ((ulong)((s)[IPaddrlen-1])%NHASH) . 36c QLock qlock; . 14d 6c #include "error.h" . 2c #include "lib.h" . diff -e ip.orig/chandial.c ip/chandial.c 6,7c #include "error.h" #include "ip/ip.h" . 2c #include "lib.h" . diff -e ip.orig/devip.c ip/devip.c 1430c QUNLOCK(c); . 1418c QUNLOCK(c); . 1404,1411c QUNLOCK(c); . 1399c QLOCK(c); . 1349c QUNLOCK(c); . 1326,1328d 1322,1323d 1318c 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); . 516c ipremove(Chan* _) . 510c ipcreate(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); . 174c ipgen(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.c 1106a #ifdef notdef enum { 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 int rc4cipher(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 void rc4espinit(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,1081d 1048,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]; . 1035c desespinit(Espcb *ecb, char *name, uchar *k, int n) . 1019,1033d 1013,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,1003d 993c ecb->ahlen = 12; . 990c klen >>= 3; /* convert to bytes */ . 986c md5ahinit(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]; . 956d 954a uchar ipad[65], opad[65]; . 796,952c void . 790c ecb->ahlen = 12; . 786c klen >>= 8; /* convert to bytes */ . 782c shaahinit(Espcb *ecb, char *name, uchar *key, int klen) . 775c seanq_hmac_sha1(hash, t, tlen, (uchar*)ecb->ahstate, 16); . 772a int r; . 771d 764c 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]; . 752d 750a uchar ipad[65], opad[65]; . 743,748c void . 735c nullahinit(Espcb *ecb, char *name, uchar* _, int __) . 729c nullauth(Espcb* _, uchar* __, int ___, uchar* ____) . 720c nullespinit(Espcb *ecb, char *name, uchar* _, int __) . 714c nullcipher(Espcb* _, uchar* __, int ___) . 708,712d 647c QUNLOCK(c); . 642c QLOCK(c); . 632c QUNLOCK(c); . 627c QLOCK(c); . 606c QUNLOCK(esp); .