From 1cff923af4dbcaaab515cc04ea40c559eab7830f Mon Sep 17 00:00:00 2001 From: cinap_lenrek Date: Sat, 25 Sep 2021 20:35:04 +0000 Subject: [PATCH] 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. --- sys/src/9/port/devtls.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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;