devsegment: fix parsecmd() memory leak

This commit is contained in:
cinap_lenrek 2015-06-09 03:33:37 +02:00
parent e2a5d674d9
commit cda46731d8

View file

@ -315,6 +315,10 @@ segmentwrite(Chan *c, void *a, long n, vlong voff)
switch(TYPE(c)){ switch(TYPE(c)){
case Qctl: case Qctl:
cb = parsecmd(a, n); cb = parsecmd(a, n);
if(waserror()){
free(cb);
nexterror();
}
if(strcmp(cb->f[0], "va") == 0){ if(strcmp(cb->f[0], "va") == 0){
if(g->s != nil) if(g->s != nil)
error("already has a virtual address"); error("already has a virtual address");
@ -335,6 +339,8 @@ segmentwrite(Chan *c, void *a, long n, vlong voff)
g->s = newseg(SG_SHARED, va, len); g->s = newseg(SG_SHARED, va, len);
} else } else
error(Ebadctl); error(Ebadctl);
free(cb);
poperror();
break; break;
case Qdata: case Qdata:
return segio(g, g->s, a, n, voff, 0); return segio(g, g->s, a, n, voff, 0);