mirror of
https://github.com/ElementsProject/lightning.git
synced 2025-01-03 20:44:54 +01:00
d9b1e69243
If we call update_channel_from_inflight *twice* with the same inflight, we will get bad results. Using tal_steal() here was a premature optimization: ``` Valgrind error file: valgrind-errors.496395 ==496395== Invalid read of size 8 ==496395== at 0x22A9D3: to_tal_hdr (tal.c:174) ==496395== by 0x22B4B5: tal_steal_ (tal.c:498) ==496395== by 0x16A13D: update_channel_from_inflight (peer_control.c:1225) ==496395== by 0x16A4C7: funding_depth_cb (peer_control.c:1299) ==496395== by 0x182807: txw_fire (watch.c:232) ==496395== by 0x182AA9: watch_topology_changed (watch.c:300) ==496395== by 0x1290ED: updates_complete (chaintopology.c:624) ==496395== by 0x129BF4: get_new_block (chaintopology.c:835) ==496395== by 0x125EEF: getrawblockbyheight_callback (bitcoind.c:362) ==496395== by 0x176ECC: plugin_response_handle (plugin.c:584) ==496395== by 0x1770F5: plugin_read_json_one (plugin.c:690) ==496395== by 0x1772D9: plugin_read_json (plugin.c:735) ==496395== Address 0x89fbb08 is 24 bytes inside a block of size 104 free'd ==496395== at 0x483CA3F: free (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so) ==496395== by 0x22B193: del_tree (tal.c:421) ==496395== by 0x22B461: tal_free (tal.c:486) ==496395== by 0x16A123: update_channel_from_inflight (peer_control.c:1223) ==496395== by 0x16A4C7: funding_depth_cb (peer_control.c:1299) ==496395== by 0x182807: txw_fire (watch.c:232) ==496395== by 0x182AA9: watch_topology_changed (watch.c:300) ==496395== by 0x1290ED: updates_complete (chaintopology.c:624) ==496395== by 0x129BF4: get_new_block (chaintopology.c:835) ==496395== by 0x125EEF: getrawblockbyheight_callback (bitcoind.c:362) ==496395== by 0x176ECC: plugin_response_handle (plugin.c:584) ==496395== by 0x1770F5: plugin_read_json_one (plugin.c:690) ==496395== Block was alloc'd at ==496395== at 0x483B7F3: malloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so) ==496395== by 0x22AC1C: allocate (tal.c:250) ==496395== by 0x22B1DD: tal_alloc_ (tal.c:428) ==496395== by 0x22B3A6: tal_alloc_arr_ (tal.c:471) ==496395== by 0x22C094: tal_dup_ (tal.c:805) ==496395== by 0x12B274: new_inflight (channel.c:187) ==496395== by 0x136D4C: wallet_commit_channel (dual_open_control.c:1260) ==496395== by 0x13B084: handle_commit_received (dual_open_control.c:2839) ==496395== by 0x13B6AF: dual_opend_msg (dual_open_control.c:2976) ==496395== by 0x1809FF: sd_msg_read (subd.c:553) ==496395== by 0x218F5D: next_plan (io.c:59) ==496395== by 0x219B65: do_plan (io.c:407) ``` Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> |
||
---|---|---|
.. | ||
test | ||
.gitignore | ||
bitcoind.c | ||
bitcoind.h | ||
chaintopology.c | ||
chaintopology.h | ||
channel_control.c | ||
channel_control.h | ||
channel_state.h | ||
channel.c | ||
channel.h | ||
closing_control.c | ||
closing_control.h | ||
coin_mvts.c | ||
coin_mvts.h | ||
connect_control.c | ||
connect_control.h | ||
datastore.c | ||
dual_open_control.c | ||
dual_open_control.h | ||
gossip_control.c | ||
gossip_control.h | ||
hsm_control.c | ||
hsm_control.h | ||
htlc_end.c | ||
htlc_end.h | ||
htlc_set.c | ||
htlc_set.h | ||
invoice.c | ||
invoice.h | ||
io_loop_with_timers.c | ||
io_loop_with_timers.h | ||
json.c | ||
json.h | ||
jsonrpc.c | ||
jsonrpc.h | ||
lightningd.c | ||
lightningd.h | ||
log_status.c | ||
log_status.h | ||
log.c | ||
log.h | ||
Makefile | ||
memdump.c | ||
memdump.h | ||
notification.c | ||
notification.h | ||
offer.c | ||
onchain_control.c | ||
onchain_control.h | ||
onion_message.c | ||
onion_message.h | ||
opening_common.c | ||
opening_common.h | ||
opening_control.c | ||
opening_control.h | ||
options.c | ||
options.h | ||
pay.c | ||
pay.h | ||
peer_control.c | ||
peer_control.h | ||
peer_fd.c | ||
peer_fd.h | ||
peer_htlcs.c | ||
peer_htlcs.h | ||
ping.c | ||
plugin_control.c | ||
plugin_control.h | ||
plugin_hook.c | ||
plugin_hook.h | ||
plugin.c | ||
plugin.h | ||
routehint.c | ||
routehint.h | ||
signmessage.c | ||
subd.c | ||
subd.h | ||
watch.c | ||
watch.h |