devsegment: fix parsecmd() memory leak
This commit is contained in:
parent
e2a5d674d9
commit
cda46731d8
1 changed files with 6 additions and 0 deletions
|
@ -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);
|
||||||
|
|
Loading…
Reference in a new issue