From fccbc306505b2d8cfa97b6c87db9d47a9351cf58 Mon Sep 17 00:00:00 2001 From: cinap_lenrek Date: Tue, 9 Nov 2021 00:33:16 +0000 Subject: [PATCH] devtls: reject zero length records (thanks sigrid) zero length record causes ensure() todo nothing, while qgrab() assumes there is at least one buffer in the queue and would dereference the nil buffer. --- sys/src/9/port/devtls.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sys/src/9/port/devtls.c b/sys/src/9/port/devtls.c index 4b691c50e..e4974ec77 100644 --- a/sys/src/9/port/devtls.c +++ b/sys/src/9/port/devtls.c @@ -766,8 +766,8 @@ if(tr->debug)pprint("consumed %d header\n", RecHdrLen); if(ver != tr->version && (tr->verset || ver < MinProtoVersion || ver > MaxProtoVersion)) rcvError(tr, EProtocolVersion, "devtls expected ver=%x%s, saw (len=%d) type=%x ver=%x '%.12s'", tr->version, tr->verset?"/set":"", len, type, ver, (char*)header); - if(len > MaxCipherRecLen || len < 0) - rcvError(tr, ERecordOverflow, "record message too long %d", len); + if(len > MaxCipherRecLen || len <= 0) + rcvError(tr, ERecordOverflow, "bad record message length %d", len); ensure(tr, &tr->unprocessed, len); nconsumed = 0; poperror();