Browse Source

hsm: clean up status usage.

We log at a higher level when we have problems, and also just fail if
master behaves, rather than complaining and hanging.

Closes: #335
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
ppa-0.6.1
Rusty Russell 7 years ago
parent
commit
4130a47f5b
  1. 60
      hsmd/hsm.c

60
hsmd/hsm.c

@ -133,8 +133,8 @@ static struct io_plan *handle_ecdh(struct io_conn *conn, struct daemon_conn *dc)
node_key(&privkey, NULL);
if (secp256k1_ecdh(secp256k1_ctx, ss.data, &point.pubkey,
privkey.secret.data) != 1) {
status_trace("secp256k1_ecdh fail for client %s",
type_to_string(trc, struct pubkey, &c->id));
status_broken("secp256k1_ecdh fail for client %s",
type_to_string(trc, struct pubkey, &c->id));
daemon_conn_send(c->master,
take(towire_hsmstatus_client_bad_request(c,
&c->id,
@ -161,13 +161,13 @@ static struct io_plan *handle_cannouncement_sig(struct io_conn *conn,
if (!fromwire_hsm_cannouncement_sig_req(ctx, dc->msg_in, NULL,
&bitcoin_id, &ca)) {
status_trace("Failed to parse cannouncement_sig_req: %s",
tal_hex(trc, dc->msg_in));
status_broken("Failed to parse cannouncement_sig_req: %s",
tal_hex(trc, dc->msg_in));
return io_close(conn);
}
if (tal_len(ca) < offset) {
status_trace("bad cannounce length %zu", tal_len(ca));
status_broken("bad cannounce length %zu", tal_len(ca));
return io_close(conn);
}
@ -202,9 +202,9 @@ static struct io_plan *handle_channel_update_sig(struct io_conn *conn,
u8 *cu;
if (!fromwire_hsm_cupdate_sig_req(tmpctx, dc->msg_in, NULL, &cu)) {
status_trace("Failed to parse %s: %s",
hsm_client_wire_type_name(fromwire_peektype(dc->msg_in)),
tal_hex(trc, dc->msg_in));
status_broken("Failed to parse %s: %s",
hsm_client_wire_type_name(fromwire_peektype(dc->msg_in)),
tal_hex(trc, dc->msg_in));
return io_close(conn);
}
@ -212,13 +212,13 @@ static struct io_plan *handle_channel_update_sig(struct io_conn *conn,
&scid, &timestamp, &flags,
&cltv_expiry_delta, &htlc_minimum_msat,
&fee_base_msat, &fee_proportional_mill)) {
status_trace("Failed to parse inner channel_update: %s",
tal_hex(trc, dc->msg_in));
status_broken("Failed to parse inner channel_update: %s",
tal_hex(trc, dc->msg_in));
return io_close(conn);
}
if (tal_len(cu) < offset) {
status_trace("inner channel_update too short: %s",
tal_hex(trc, dc->msg_in));
status_broken("inner channel_update too short: %s",
tal_hex(trc, dc->msg_in));
return io_close(conn);
}
@ -279,12 +279,12 @@ static struct io_plan *handle_client(struct io_conn *conn,
struct client *c = container_of(dc, struct client, dc);
enum hsm_client_wire_type t = fromwire_peektype(dc->msg_in);
status_trace("Client: Received message %d from client", t);
status_debug("Client: Received message %d from client", t);
/* Before we do anything else, is this client allowed to do
* what he asks for? */
if (!check_client_capabilities(c, t)) {
status_trace("Client does not have the required capability to run %d", t);
status_broken("Client does not have the required capability to run %d", t);
daemon_conn_send(c->master,
take(towire_hsmstatus_client_bad_request(
c, &c->id, dc->msg_in)));
@ -592,10 +592,10 @@ static void hsm_key_for_utxo(struct privkey *privkey, struct pubkey *pubkey,
if (utxo->close_info != NULL) {
/* This is a their_unilateral_close/to-us output, so
* we need to derive the secret the long way */
status_trace("Unilateral close output, deriving secrets");
status_debug("Unilateral close output, deriving secrets");
hsm_unilateral_close_privkey(privkey, utxo->close_info);
pubkey_from_privkey(privkey, pubkey);
status_trace("Derived public key %s from unilateral close", type_to_string(trc, struct pubkey, pubkey));
status_debug("Derived public key %s from unilateral close", type_to_string(trc, struct pubkey, pubkey));
} else {
/* Simple case: just get derive via HD-derivation */
bitcoin_keypair(privkey, pubkey, utxo->keyindex);
@ -692,15 +692,15 @@ static void sign_withdrawal_tx(struct daemon_conn *master, const u8 *msg)
if (!fromwire_hsm_sign_withdrawal(tmpctx, msg, NULL, &satoshi_out,
&change_out, &change_keyindex,
&scriptpubkey, &inutxos)) {
status_trace("Failed to parse sign_withdrawal: %s",
tal_hex(trc, msg));
status_broken("Failed to parse sign_withdrawal: %s",
tal_hex(trc, msg));
return;
}
if (bip32_key_from_parent(&secretstuff.bip32, change_keyindex,
BIP32_FLAG_KEY_PUBLIC, &ext) != WALLY_OK) {
status_trace("Failed to parse sign_withdrawal: %s",
tal_hex(trc, msg));
status_broken("Failed to parse sign_withdrawal: %s",
tal_hex(trc, msg));
return;
}
@ -762,8 +762,8 @@ static void sign_invoice(struct daemon_conn *master, const u8 *msg)
struct privkey node_pkey;
if (!fromwire_hsm_sign_invoice(tmpctx, msg, NULL, &u5bytes, &hrpu8)) {
status_trace("Failed to parse sign_invoice: %s",
tal_hex(trc, msg));
status_broken("Failed to parse sign_invoice: %s",
tal_hex(trc, msg));
return;
}
@ -781,10 +781,9 @@ static void sign_invoice(struct daemon_conn *master, const u8 *msg)
(const u8 *)&sha,
node_pkey.secret.data,
NULL, NULL)) {
/* FIXME: Now master will freeze... */
status_trace("Failed to sign invoice: %s",
tal_hex(trc, msg));
return;
status_failed(STATUS_FAIL_INTERNAL_ERROR,
"Failed to sign invoice: %s",
tal_hex(trc, msg));
}
daemon_conn_send(master,
@ -803,14 +802,15 @@ static void sign_node_announcement(struct daemon_conn *master, const u8 *msg)
u8 *ann;
if (!fromwire_hsm_node_announcement_sig_req(msg, msg, NULL, &ann)) {
status_trace("Failed to parse node_announcement_sig_req: %s",
status_failed(STATUS_FAIL_GOSSIP_IO,
"Failed to parse node_announcement_sig_req: %s",
tal_hex(trc, msg));
return;
}
if (tal_len(ann) < offset) {
status_trace("Node announcement too short: %s", tal_hex(trc, msg));
return;
status_failed(STATUS_FAIL_GOSSIP_IO,
"Node announcement too short: %s",
tal_hex(trc, msg));
}
/* FIXME(cdecker) Check the node announcement's content */

Loading…
Cancel
Save