diff --git a/src/sbbs3/sftp.cpp b/src/sbbs3/sftp.cpp
index d61afc4294be63332a8921efb4eeb6a84ab8534d..a389e7e06ac8b6a3f07fc990d6b4a2b2738da5f5 100644
--- a/src/sbbs3/sftp.cpp
+++ b/src/sbbs3/sftp.cpp
@@ -993,8 +993,10 @@ sftp_send(uint8_t *buf, size_t len, void *cb_data)
 	while (sent < len) {
 		pthread_mutex_lock(&sbbs->ssh_mutex);
 		status = cryptSetAttribute(sbbs->ssh_session, CRYPT_SESSINFO_SSH_CHANNEL, sbbs->sftp_channel);
-		if (cryptStatusError(status))
+		if (cryptStatusError(status)) {
+			pthread_mutex_unlock(&sbbs->ssh_mutex);
 			return false;
+		}
 		size_t sendbytes = len - sent;
 #define SENDBYTES_MAX 0x2000
 		if (sendbytes > SENDBYTES_MAX)
diff --git a/src/sftp/sftp_server.c b/src/sftp/sftp_server.c
index 87bc9fa097c88ba67c7b74d17c41c88995ee1295..1d047b22a36c9f117fe63df0a4ea075f1f6270e8 100644
--- a/src/sftp/sftp_server.c
+++ b/src/sftp/sftp_server.c
@@ -374,7 +374,7 @@ sftps_recv(sftps_state_t state, uint8_t *buf, uint32_t sz)
 		uint32_t psz = sftp_pkt_sz(state->rxp);
 		if (psz > SFTP_MAX_PACKET_SIZE) {
 			state->lprintf(state->cb_data, "Packet too large (%" PRIu32 " bytes)", psz);
-			return false;
+			return exit_function(state, false);
 		}
 	}
 	while (sftp_have_full_pkt(state->rxp)) {