git: 9front

Download patch

ref: 62d86c34105dcc67dccdf429ff92fd35bd84cd72
parent: c310ffbdf94d4c66af3ed00033a4e10841ba60bc
author: cinap_lenrek <cinap_lenrek@felloff.net>
date: Sun Sep 21 15:24:38 EDT 2014

devip: sanity check Nchan in Fsproto()

devip can only handle Maskconv+1 conversations per
protocol depending on how many bits it uses in the
qid to encode the conversation number.

we check this when the protocol gets registered.

if we do not do this, the kernel will mysteriously
panic when the conversaion numbers collide which
took some time to debug.

--- a/sys/src/9/ip/devip.c
+++ b/sys/src/9/ip/devip.c
@@ -1243,6 +1243,10 @@
 
 	p->qid.type = QTDIR;
 	p->qid.path = QID(f->np, 0, Qprotodir);
+	if(p->nc > Maskconv+1){
+		print("Fsproto: %s nc %d > %d\n", p->name, p->nc, Maskconv+1);
+		p->nc = Maskconv+1;
+	}
 	p->conv = malloc(sizeof(Conv*)*(p->nc+1));
 	if(p->conv == nil)
 		panic("Fsproto");
--