Skip to content

Commit 1a89936

Browse files
committed
gossipd: fix crash in gossmap_fetch_tail.
It only gets called for diagnostics when something goes wrong (and we were going to exit anyway), but it shouldn't crash: ``` **BROKEN** gossipd: Truncated gossmap record @7991501/7991523 (len 0): waiting **BROKEN** gossipd: FATAL SIGNAL 6 (version v25.09) **BROKEN** gossipd: backtrace: common/daemon.c:41 (send_backtrace) 0x6506817cc529 **BROKEN** gossipd: backtrace: common/daemon.c:78 (crashdump) 0x6506817cc578 **BROKEN** gossipd: backtrace: ./signal/../sysdeps/unix/sysv/linux/x86_64/libc_sigaction.c:0 ((null)) 0x75e8267a032f **BROKEN** gossipd: backtrace: ./nptl/pthread_kill.c:44 (__pthread_kill_implementation) 0x75e8267f9b2c **BROKEN** gossipd: backtrace: ./nptl/pthread_kill.c:78 (__pthread_kill_internal) 0x75e8267f9b2c **BROKEN** gossipd: backtrace: ./nptl/pthread_kill.c:89 (__GI___pthread_kill) 0x75e8267f9b2c **BROKEN** gossipd: backtrace: ../sysdeps/posix/raise.c:26 (__GI_raise) 0x75e8267a027d **BROKEN** gossipd: backtrace: ./stdlib/abort.c:79 (__GI_abort) 0x75e8267838fe **BROKEN** gossipd: backtrace: ./assert/assert.c:96 (__assert_fail_base) 0x75e82678381a **BROKEN** gossipd: backtrace: ./assert/assert.c:105 (__assert_fail) 0x75e826796516 **BROKEN** gossipd: backtrace: common/gossmap.c:111 (map_copy) 0x6506817cea77 **BROKEN** gossipd: backtrace: common/gossmap.c:1870 (gossmap_fetch_tail) 0x6506817d1f93 **BROKEN** gossipd: backtrace: gossipd/gossmap_manage.c:1442 (gossmap_manage_get_gossmap) 0x6506817c45fb **BROKEN** gossipd: backtrace: gossipd/gossmap_manage.c:753 (gossmap_manage_handle_get_txout_reply) 0x6506817c5850 **BROKEN** gossipd: backtrace: gossipd/gossipd.c:574 (recv_req) 0x6506817c172b ``` Reported-by: @grubles Fixes: #8542 Signed-off-by: Rusty Russell <[email protected]> Changelog-Fixed: gossipd: crash on incoherent filesystems (e.g. ZFS on Linux)
1 parent e14cae9 commit 1a89936

File tree

1 file changed

+2
-3
lines changed

1 file changed

+2
-3
lines changed

common/gossmap.c

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1868,10 +1868,9 @@ const u8 *gossmap_fetch_tail(const tal_t *ctx, const struct gossmap *map)
18681868
u8 *p;
18691869

18701870
/* Shouldn't happen... */
1871-
if (map->map_end > map->map_size)
1871+
if (map->map_end > map->map_size || !map->mmap)
18721872
return NULL;
18731873
len = map->map_size - map->map_end;
18741874
p = tal_arr(ctx, u8, len);
1875-
map_copy(map, map->map_size, p, len);
1876-
return p;
1875+
return memcpy(p, map->mmap + map->map_size, len);
18771876
}

0 commit comments

Comments
 (0)