diff options
author | cinap_lenrek <cinap_lenrek@felloff.net> | 2021-09-25 20:35:04 +0000 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@felloff.net> | 2021-09-25 20:35:04 +0000 |
commit | 1cff923af4dbcaaab515cc04ea40c559eab7830f (patch) | |
tree | b152b784b2d8ee106b0319b278bbb8d2c5632ffe | |
parent | 235ef367d793db705b1b4ef20913c697eccd13a6 (diff) |
devtls: fix bwrite memory leak when channel stops being open
tlsbwrite() would call checkstate() before calling tlsrecwrite()
to make sure the channel is open. however, because checkstate()
only raises the error, the Block* passed wont be freed and
would result in a memory leak.
move the checkstate() call inside tlsrecwrite() to reuse the
error handling that frees the block on error.
-rw-r--r-- | sys/src/9/port/devtls.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/sys/src/9/port/devtls.c b/sys/src/9/port/devtls.c index 177d8ecb4..3409e37fb 100644 --- a/sys/src/9/port/devtls.c +++ b/sys/src/9/port/devtls.c @@ -1258,6 +1258,8 @@ tlsrecwrite(TlsRec *tr, int type, Block *b) if(tr->debug)pprint("send %zd\n", BLEN(b)); if(tr->debug)pdump(BLEN(b), b->rp, "sent:"); + if(type == RApplication) + checkstate(tr, 0, SOpen); ok = SHandshake|SOpen|SRClose; if(type == RAlert) @@ -1375,7 +1377,6 @@ tlsbwrite(Chan *c, Block *b, ulong offset) tr->handout += n; break; case Qdata: - checkstate(tr, 0, SOpen); tlsrecwrite(tr, RApplication, b); tr->dataout += n; break; |