summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@felloff.net>2021-09-25 20:35:04 +0000
committercinap_lenrek <cinap_lenrek@felloff.net>2021-09-25 20:35:04 +0000
commit1cff923af4dbcaaab515cc04ea40c559eab7830f (patch)
treeb152b784b2d8ee106b0319b278bbb8d2c5632ffe
parent235ef367d793db705b1b4ef20913c697eccd13a6 (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.c3
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;