connectd: clean up decrypted packet memory handling.

Use tmpctx, rather than freeing manually everywhere (proof: next patch
added a branch and forgot to free it!).

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
This commit is contained in:
Rusty Russell
2022-03-22 19:21:13 +10:30
parent 9bbb32433e
commit 005d69c463

View File

@@ -670,7 +670,7 @@ static struct io_plan *read_body_from_peer_done(struct io_conn *peer_conn,
{ {
u8 *decrypted; u8 *decrypted;
decrypted = cryptomsg_decrypt_body(NULL, &peer->cs, decrypted = cryptomsg_decrypt_body(tmpctx, &peer->cs,
peer->peer_in); peer->peer_in);
if (!decrypted) { if (!decrypted) {
status_peer_debug(&peer->id, "Bad encrypted packet len %zu", status_peer_debug(&peer->id, "Bad encrypted packet len %zu",
@@ -680,28 +680,20 @@ static struct io_plan *read_body_from_peer_done(struct io_conn *peer_conn,
tal_free(peer->peer_in); tal_free(peer->peer_in);
/* dev_disconnect can disable read */ /* dev_disconnect can disable read */
if (!IFDEV(peer->dev_read_enabled, true)) { if (!IFDEV(peer->dev_read_enabled, true))
tal_free(decrypted);
return read_hdr_from_peer(peer_conn, peer); return read_hdr_from_peer(peer_conn, peer);
}
/* Don't process packets while we're closing */ /* Don't process packets while we're closing */
if (peer->told_to_close) { if (peer->told_to_close)
tal_free(decrypted);
return read_hdr_from_peer(peer_conn, peer); return read_hdr_from_peer(peer_conn, peer);
}
/* If we swallow this, just try again. */ /* If we swallow this, just try again. */
if (handle_message_locally(peer, decrypted)) { if (handle_message_locally(peer, decrypted))
tal_free(decrypted);
return read_hdr_from_peer(peer_conn, peer); return read_hdr_from_peer(peer_conn, peer);
}
/* If there's no subd, discard and keep reading. */ /* If there's no subd, discard and keep reading. */
if (!peer->to_subd) { if (!peer->to_subd)
tal_free(decrypted);
return read_hdr_from_peer(peer_conn, peer); return read_hdr_from_peer(peer_conn, peer);
}
/* Tell them to write. */ /* Tell them to write. */
msg_enqueue(peer->subd_outq, take(decrypted)); msg_enqueue(peer->subd_outq, take(decrypted));