From: Dmitriy Vyukov Date: Thu, 13 Mar 2014 09:16:02 +0000 (+0400) Subject: runtime: fix stack size check X-Git-Tag: go1.3beta1~368 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=5daffee17fdd8c10ead83a87861d99c39f05561d;p=gostls13.git runtime: fix stack size check When we copy stack, we check only new size of the top segment. This is incorrect, because we can have other segments below it. LGTM=khr R=golang-codereviews, khr CC=golang-codereviews, rsc https://golang.org/cl/73980045 --- diff --git a/src/pkg/runtime/stack.c b/src/pkg/runtime/stack.c index 4bdc24107c..bb7a32f8ae 100644 --- a/src/pkg/runtime/stack.c +++ b/src/pkg/runtime/stack.c @@ -662,13 +662,13 @@ runtime·newstack(void) oldbase = (byte*)gp->stackbase + sizeof(Stktop); oldsize = oldbase - oldstk; newsize = oldsize * 2; - if(newsize > runtime·maxstacksize) { - runtime·printf("runtime: goroutine stack exceeds %D-byte limit\n", (uint64)runtime·maxstacksize); - runtime·throw("stack overflow"); - } copystack(gp, nframes, newsize); if(StackDebug >= 1) runtime·printf("stack grow done\n"); + if(gp->stacksize > runtime·maxstacksize) { + runtime·printf("runtime: goroutine stack exceeds %D-byte limit\n", (uint64)runtime·maxstacksize); + runtime·throw("stack overflow"); + } gp->status = oldstatus; runtime·gogo(&gp->sched); }