M boot/key.c => boot/key.c +6 -8
@@ 3,14 3,12 @@
#include <auth.h>
#include <../boot/boot.h>
-char defpass[] = {0x64, 0x3e, 0x4d, 0x13, 0x32, 0x00, 0x0b, 0xe1, 0xce};
-
void
key(int islocal, Method *mp)
{
Nvrsafe safe;
char password[20];
- int prompt, fd, i;
+ int prompt, fd;
USED(islocal);
USED(mp);
@@ 25,16 23,16 @@ key(int islocal, Method *mp)
|| read(fd, &safe, sizeof safe) != sizeof safe)
warning("can't read nvram key");
+getp:
if(prompt){
do
getpasswd(password, sizeof password);
while(!passtokey(safe.machkey, password));
}else if(nvcsum(safe.machkey, DESKEYLEN) != safe.machsum){
- warning("bad nvram key; using default password");
- /* Just so its not plain text in the binary */
- for(i=0; i<sizeof(defpass); i++)
- defpass[i] = (defpass[i]-19)^(17*(i+3));
- passtokey(safe.machkey, defpass);
+ warning("bad nvram key");
+ prompt = 1;
+ kflag = 1;
+ goto getp;
}
safe.machsum = nvcsum(safe.machkey, DESKEYLEN);
if(kflag){
M port/stip.c => port/stip.c +3 -0
@@ 467,6 467,9 @@ ip_reassemble(int offset, Block *bp, Etherhdr *ip)
fragstat.succall++;
BLKFRAG(*l)->flen -= ovlap;
BLKFRAG(*l)->foff += ovlap;
+ /* move up ether+ip hdrs */
+ memmove((*l)->rptr + ovlap, (*l)->rptr,
+ ETHER_HDR+ETHER_IPHDR);
(*l)->rptr += ovlap;
break;
}
M port/tcpinput.c => port/tcpinput.c +10 -3
@@ 163,7 163,7 @@ tcp_input(Ipifc *ifc, Block *bp)
if(bp == 0)
return;
- /* Look for a connection, failing that attempt to establish a listen */
+ /* Look for a connection. failing that look for a listener. */
s = ip_conn(ifc, seg.dest, seg.source, source);
if (s == 0) {
if(seg.flags & SYN){
@@ 390,7 390,6 @@ tcp_input(Ipifc *ifc, Block *bp)
case Syn_received:
case Established:
case Finwait1:
- case Finwait2:
/* Place on receive queue */
tcb->rcvcnt += blen(bp);
if(bp){
@@ 409,6 408,12 @@ tcp_input(Ipifc *ifc, Block *bp)
if(tcb->max_snd <= tcb->rcv.nxt-tcb->last_ack)
tcb->flags |= FORCE;
break;
+ case Finwait2:
+ /* no process to read the data, send a reset */
+ if(bp)
+ freeb(bp);
+ reset(source, dest, tos, length, &seg);
+ goto done;
}
}
@@ 612,8 617,10 @@ add_reseq(Tcpctl *tcb, char tos, Tcp *seg, Block *bp, ushort length)
Reseq *rp, *rp1;
rp = malloc(sizeof(Reseq));
- if(rp == 0)
+ if(rp == 0){
+ freeb(bp); /* bp always consumed by add_reseq */
return;
+ }
rp->seg = *seg;
rp->tos = tos;
M port/tcpoutput.c => port/tcpoutput.c +6 -2
@@ 231,13 231,17 @@ void
tcprcvwin(Ipconv *s) /* Call with tcb locked */
{
Tcpctl *tcb = &s->tcpctl;
+ int w;
/* Calculate new window */
qlock(s);
if(s->readq) {
- tcb->rcv.wnd = Streamhi - s->readq->next->len;
- if(tcb->rcv.wnd < 0)
+ /* use w because rcv.wnd is unsigned */
+ w = Streamhi - s->readq->next->len;
+ if(w < 0)
tcb->rcv.wnd = 0;
+ else
+ tcb->rcv.wnd = w;
}
else
tcb->rcv.wnd = Streamhi;
M ss/l.s => ss/l.s +15 -15
@@ 430,35 430,35 @@ TEXT putwE16(SB), $0
MOVW 4(FP), R8
MOVW R8, (R7, 0xE)
- ADD $(1<<4), R7
+ ADD $VACLINESZ, R7
MOVW R8, (R7, 0xE)
- ADD $(1<<4), R7
+ ADD $VACLINESZ, R7
MOVW R8, (R7, 0xE)
- ADD $(1<<4), R7
+ ADD $VACLINESZ, R7
MOVW R8, (R7, 0xE)
- ADD $(1<<4), R7
+ ADD $VACLINESZ, R7
MOVW R8, (R7, 0xE)
- ADD $(1<<4), R7
+ ADD $VACLINESZ, R7
MOVW R8, (R7, 0xE)
- ADD $(1<<4), R7
+ ADD $VACLINESZ, R7
MOVW R8, (R7, 0xE)
- ADD $(1<<4), R7
+ ADD $VACLINESZ, R7
MOVW R8, (R7, 0xE)
- ADD $(1<<4), R7
+ ADD $VACLINESZ, R7
MOVW R8, (R7, 0xE)
- ADD $(1<<4), R7
+ ADD $VACLINESZ, R7
MOVW R8, (R7, 0xE)
- ADD $(1<<4), R7
+ ADD $VACLINESZ, R7
MOVW R8, (R7, 0xE)
- ADD $(1<<4), R7
+ ADD $VACLINESZ, R7
MOVW R8, (R7, 0xE)
- ADD $(1<<4), R7
+ ADD $VACLINESZ, R7
MOVW R8, (R7, 0xE)
- ADD $(1<<4), R7
+ ADD $VACLINESZ, R7
MOVW R8, (R7, 0xE)
- ADD $(1<<4), R7
+ ADD $VACLINESZ, R7
MOVW R8, (R7, 0xE)
- ADD $(1<<4), R7
+ ADD $VACLINESZ, R7
MOVW R8, (R7, 0xE)
RETURN
M ss/main.c => ss/main.c +0 -2
@@ 96,14 96,12 @@ init0(void)
u->p->state = Running;
u->p->mach = m;
spllo();
-print("init0:\n"); prflush();
u->slash = (*devtab[0].attach)(0);
u->dot = clone(u->slash, 0);
kproc("alarm", alarmkproc, 0);
chandevinit();
-print("alarmkp:\n"); prflush();
if(!waserror()){
ksetterm("sun %s");
M ss/mmu.c => ss/mmu.c +7 -7
@@ 125,8 125,8 @@ flushcontext(void)
/*
* Clear context from cache
*/
- for(i=0; i<0x1000; i+=16)
- putwE16((i<<4), 0);
+ for(i=0; i<VACSIZE; i+=16*VACLINESZ)
+ putwE16(i, 0);
}
void
@@ 142,9 142,9 @@ mmuinit(void)
ulong ktop, l, i, j, c, pte;
/*
- * TEMP: just map the first 8M of bank 0 for the kernel - philw
+ * TEMP: just map the first 4M of bank 0 for the kernel - philw
*/
- ktop = 8*1024*1024;
+ ktop = 4*1024*1024;
/*
* First map lots of memory as kernel addressable in all contexts
*/
@@ 270,7 270,7 @@ putpmeg(ulong virt, ulong phys)
/*
* Flush old entries from cache
*/
- for(i=0; i<VACSIZE; i+=16*VACLINESZ)
+ for(i=0; i<BY2PG; i+=16*VACLINESZ)
putwD16(virt+i, 0);
putw4(virt, phys);
}
@@ 305,8 305,8 @@ cacheinit(void)
*/
for(c=0; c<NCONTEXT; c++){ /* necessary? */
putcontext(c);
- for(i=0; i<0x1000; i++)
- putw2(CACHETAGS+(i<<4), 0);
+ for(i=0; i<VACSIZE; i+=VACLINESZ)
+ putw2(CACHETAGS+i, 0);
}
putcontext(0);