diff options
author | cinap_lenrek <cinap_lenrek@gmx.de> | 2013-05-01 18:31:13 +0200 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@gmx.de> | 2013-05-01 18:31:13 +0200 |
commit | d4414b3959fd289aaffcf0e10227b5860a0bb254 (patch) | |
tree | 12b009ae91e3003e7619878303d51e7c065cfdf3 /sys/src/9/port/devloopback.c | |
parent | 58533c35fb6164c655c6925544c3147701d27dca (diff) |
devloopback: fix potential channel leak on allocation error (from eriks 9atom)
Diffstat (limited to 'sys/src/9/port/devloopback.c')
-rw-r--r-- | sys/src/9/port/devloopback.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/sys/src/9/port/devloopback.c b/sys/src/9/port/devloopback.c index d3a64932b..cc51a1bf3 100644 --- a/sys/src/9/port/devloopback.c +++ b/sys/src/9/port/devloopback.c @@ -131,8 +131,12 @@ loopbackattach(char *spec) } c = devattach('X', spec); - lb = &loopbacks[dev]; + if(waserror()){ + chanfree(c); + nexterror(); + } + lb = &loopbacks[dev]; qlock(lb); if(waserror()){ lb->ref--; @@ -168,6 +172,8 @@ loopbackattach(char *spec) poperror(); qunlock(lb); + poperror(); + mkqid(&c->qid, QID(0, Qtopdir), 0, QTDIR); c->aux = lb; c->dev = dev; |