fuzz: banman, Assertion `banmap == banmap_read’ failed #27924

issue brunoerg openend this issue on June 20, 2023
  1. brunoerg commented at 10:00 pm on June 20, 2023: contributor

    fabed982ad9143cddaca8346f6b4c243dd84e0c4 re-enabled the assert assert(banmap == banmap_read) in banman:

    0ban_man.DumpBanlist();
    1SetMockTime(ConsumeTime(fuzzed_data_provider));
    2banmap_t banmap;
    3ban_man.GetBanned(banmap);
    4BanMan ban_man_read{banlist_file, /* client_interface */ nullptr, /* default_ban_time */ 0};
    5banmap_t banmap_read;
    6ban_man_read.GetBanned(banmap_read);
    7assert(banmap == banmap_read);
    

    However, my server crashed because of it. Debugging it I could realize the problem is the function LookupSubnet.

    During the execution that caused the crash, the banman has been filled with the following subnets:

    02e:6f6e:696f:6ef3:a080:b18d:5d5d:5d00%2038004089/121
    1191:b491:7979:7979:7979:7979:79ff:ff80%2037980897/121
    2207:fc26:b9ce:7aae:798b:5f2d:1d39:4380%2038004089/121
    3676:c962:7962:b787:b392:fed8:7058:c500%2038004089/121
    4...
    

    After dumping it (DumpBanlist), we initialize a BanMan reading same file:

    0BanMan ban_man_read{banlist_file, /* client_interface */ nullptr, /* default_ban_time */ 0};
    1banmap_t banmap_read;
    2ban_man_read.GetBanned(banmap_read);
    

    However, when we initialize a BanMan it will - at some point - call BanMapFromJson.

    Taking a look at BanMapFromJson, I noticed we have:

    0if (!LookupSubNet(subnet_str, subnet)) {
    1    LogPrintf("Dropping entry with unparseable address or subnet (%s) from ban list\n", subnet_str);
    2    continue;
    3}
    

    Calling LookupSubNet, for example, with 2e:6f6e:696f:6ef3:a080:b18d:5d5d:5d00%2038004089/121, will return true, but the subnet will be 2e:6f6e:696f:6ef3:a080:b18d:5d5d:5d00%31097 making the assertion assert(banmap == banmap_read) to fail.


    Got this with macOS Ventura 13.0.

    0./configure --enable-fuzz --with-sanitizers=fuzzer,address,undefined --disable-asm CC=$(brew --prefix llvm)/bin/clang CXX=$(brew --prefix llvm)/bin/clang++
    

    Crash:

     0INFO: Running with entropic power schedule (0xFF, 100).
     1INFO: Seed: 3851287319
     2INFO: Loaded 1 modules   (1130675 inline 8-bit counters): 1130675 [0x107b6cd60, 0x107c80e13), 
     3INFO: Loaded 1 PC tables (1130675 PCs): 1130675 [0x107c80e18,0x108dc1948), 
     4src/test/fuzz/fuzz: Running 1 inputs 1 time(s) each.
     5Running: crash-cc17009262908f232f471481d1ad808e2bf6dc14
     6Assertion failed: (banmap == banmap_read), function banman_fuzz_target, file banman.cpp, line 112.
     7==79739== ERROR: libFuzzer: deadly signal
     8    [#0](/bitcoin-bitcoin/0/) 0x10a453ea4 in __sanitizer_print_stack_trace+0x28 (libclang_rt.asan_osx_dynamic.dylib:arm64+0x5bea4) (BuildId: 5c04277be4ee3a049b85963fe58ab4e132000000200000000100000000000b00)
     9    [#1](/bitcoin-bitcoin/1/) 0x1070bf970 in fuzzer::PrintStackTrace() FuzzerUtil.cpp:210
    10    [#2](/bitcoin-bitcoin/2/) 0x1070a3d8c in fuzzer::Fuzzer::CrashCallback() FuzzerLoop.cpp:233
    11    [#3](/bitcoin-bitcoin/3/) 0x18065c2a0 in _sigtramp+0x34 (libsystem_platform.dylib:arm64+0x42a0) (BuildId: 781896702f47332c9a59a210157aa97b32000000200000000100000000000d00)
    12    [#4](/bitcoin-bitcoin/4/) 0xfa7f80018062dce8  (<unknown module>)
    13    [#5](/bitcoin-bitcoin/5/) 0x51270001805672c4  (<unknown module>)
    14    [#6](/bitcoin-bitcoin/6/) 0x614a00018056661c  (<unknown module>)
    15    [#7](/bitcoin-bitcoin/7/) 0x382f000104c37c88  (<unknown module>)
    16    [#8](/bitcoin-bitcoin/8/) 0x1052468f8 in LLVMFuzzerTestOneInput fuzz.cpp:169
    17    [#9](/bitcoin-bitcoin/9/) 0x1070a51c8 in fuzzer::Fuzzer::ExecuteCallback(unsigned char const*, unsigned long) FuzzerLoop.cpp:617
    18    [#10](/bitcoin-bitcoin/10/) 0x107091590 in fuzzer::RunOneTest(fuzzer::Fuzzer*, char const*, unsigned long) FuzzerDriver.cpp:324
    19    [#11](/bitcoin-bitcoin/11/) 0x1070967c4 in fuzzer::FuzzerDriver(int*, char***, int (*)(unsigned char const*, unsigned long)) FuzzerDriver.cpp:860
    20    [#12](/bitcoin-bitcoin/12/) 0x1070c0bc0 in main FuzzerMain.cpp:20
    21    [#13](/bitcoin-bitcoin/13/) 0x180303e4c  (<unknown module>)
    22    [#14](/bitcoin-bitcoin/14/) 0x7d03fffffffffffc  (<unknown module>)
    23
    24NOTE: libFuzzer has rudimentary signal handlers.
    25      Combine libFuzzer with AddressSanitizer or similar for better crash reports.
    26SUMMARY: libFuzzer: deadly signal
    

    Seed:

    0X3J1bmViYX39GgAAAAAAAAD///8AACsAXAAAAFx00UUXXXQBFRUVFRUVFRUVFRVvLwB/AAAAgAABAAABAQcAAACRtJGdEZGRQAAAAMQgf38AQAqRkf/w/6cCAZG0kXl5eXl5eXl5ef//////////eXl5eXl5eXl5eXl5eXl5jMCDHsFtvdtVxH7U1agiqUM6FTiq9Tg1OfCMddTHrRhzOQ0wCFHRVS3D7kqAmf4ii4FzNYkn9XcN8ubYNitv6cgN9E1kKPbQJOCC2dYrPDwDDQHZQeqOD7K+uD8GdslieWK3h7OS/thwWMUdw+KmgryaSZvunotnNKkz/uq98HjtQrUH/LUmUeb7pTZHqTApZ3jXVmGS2Muo96HLI9g3d0EG5LHce+mRSy2jB6TFuBRAQpwjghLRiU+S75ltwhrmRUXBfa4kpmjq2FrBYiVbbTYisifxMsnvPS7ix+IwpTats2ewEGQITg/MeZbhvKcZxxczHeb6ht1PrRV4/o/msCwN2d8RVC0DYh2gqj1aC06cGMXgoZw+T3ll5CH8dghESnW98W3i283GUy/3tSwPV8GLot5X/DupHLge/RQxtmgnIJhXgq/UMzTL7XK9y1oMooLSPiDhJiVmrKE95f549o1H9UZXSx1mwGCqap51HHrCSsnjiP13Wn1+WtyEUUAObNBDhcSjuHMMWY95B938zoOKTbFpyY3gzAi5Z8ujR2KmnEaKT4MKAVGQAAAAAAAAAAAAAAAAAAAAAP5W0ABJaWjFneFMmuY9koAoGVtScppmwwOw9++Ufx0dTyvFjZHkROJ6mlu0UKCvY6sTccKSugFu0/QncpR5/DBzYqTSe0OKQSMhzIN2HQEAo05OWxU9XQsTKRfg/bSB1//EXudt4jZEIyns29ZRAAAAAAAAAAB5cXFxcXFxcXFxcXFxcXFxcXl5PgAAAAAAAABwkZiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmEAAAC5vbmlvbvOggLGNXV1dDV0NAABVlEQAXRAAP11d+gj/f7+12l1VlABdEF0AROA9//////8I/38I/yZ/CP9/CP9/CP9/CP9/B/9/CHl5eXn/////////////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeXl5eQB5ecJ5eQF0eXl5eXl5eXl5eXkAgDsAAACAeXkmeXmwV3P1HqaLvq9HJCO3LQzu6Khz1/N6ndp/+0uXhvDVw6ekexeobSVOnFS7455nfwXAfGVyqxh8mvHWMdOKECKCa6HLBzj/rHbPG+HNtG/wvAIH/Ca5znqueYtfLR05Q66eoEheVZbgZSZn9xtbTUOMCPf+fwZ/3/wCs5ve9RqjRhRopnTXzm6R53SyY8OhPkjZfmHekZiP4qpCUN0rFIU8cZojTVAUZWJjT7OKXmAgZ5GWTGuyos8GKQMfmo4KCFuwt0/0+x9aKSC2z5JDTqebow5cVrdEjrozEjNXNL36tvOaLdGvcMfJ8xlUmOjI6DU+pmEn4ZUXUxUu9CnwZ8ZsjJcs0bOiVJd5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eYeHeXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5fXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5/YfYfutDeXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXkAeXl5eeEeeXl5eXl6eYATE3l5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl9eXl5eQCAOwAAAIB5eXl5eQ==
    

    The following diff reproduces the behavior:

     0diff --git a/src/test/banman_tests.cpp b/src/test/banman_tests.cpp
     1index cebe3629d..d24f55979 100644
     2--- a/src/test/banman_tests.cpp
     3+++ b/src/test/banman_tests.cpp
     4@@ -20,11 +20,12 @@ BOOST_AUTO_TEST_CASE(file)
     5     SetMockTime(777s);
     6     const fs::path banlist_path{m_args.GetDataDirBase() / "banlist_test"};
     7     {
     8+        const std::string suspect_subnet{"2e:6f6e:696f:6ef3:a080:b18d:5d5d:5d00%2038004089/121"};
     9         const std::string entries_write{
    10             "{ \"banned_nets\": ["
    11             "  { \"version\": 1, \"ban_created\": 0, \"banned_until\": 778, \"address\": \"aaaaaaaaa\" },"
    12             "  { \"version\": 2, \"ban_created\": 0, \"banned_until\": 778, \"address\": \"bbbbbbbbb\" },"
    13-            "  { \"version\": 1, \"ban_created\": 0, \"banned_until\": 778, \"address\": \"1.0.0.0/8\" }"
    14+            "  { \"version\": 1, \"ban_created\": 0, \"banned_until\": 778, \"address\": \"2e:6f6e:696f:6ef3:a080:b18d:5d5d:5d00%2038004089/121\" }"
    15             "] }",
    16         };
    17         BOOST_REQUIRE(WriteBinaryFile(banlist_path + ".json", entries_write));
    18@@ -36,6 +37,11 @@ BOOST_AUTO_TEST_CASE(file)
    19             banmap_t entries_read;
    20             banman.GetBanned(entries_read);
    21             BOOST_CHECK_EQUAL(entries_read.size(), 1);
    22+
    23+            for (const auto& it : entries_read) {
    24+                CSubNet sub_net = it.first;
    25+                BOOST_CHECK_EQUAL(sub_net.ToString(), suspect_subnet);
    26+            }
    27         }
    28     }
    29 }
    
     0diff --git a/test/functional/rpc_setban.py b/test/functional/rpc_setban.py
     1index b4f3d77e5..93a19920c 100755
     2--- a/test/functional/rpc_setban.py
     3+++ b/test/functional/rpc_setban.py
     4@@ -25,6 +25,10 @@ class SetBanTests(BitcoinTestFramework):
     5         peerinfo = self.nodes[1].getpeerinfo()[0]
     6         assert not "noban" in peerinfo["permissions"]
     7 
     8+        subnet = "2e:6f6e:696f:6ef3:a080:b18d:5d5d:5d00%2038004089/121"
     9+        self.nodes[1].setban(subnet, "add")
    10+        assert self.is_banned(self.nodes[1], subnet)
    11+
    12         # Node 0 get banned by Node 1
    13         self.nodes[1].setban("127.0.0.1", "add")
    
  2. brunoerg commented at 10:00 pm on June 20, 2023: contributor
  3. maflcko commented at 5:43 am on June 21, 2023: member
    Do you have steps to reproduce?
  4. brunoerg commented at 2:18 pm on June 21, 2023: contributor
    Just updated the description with a diff to reproduce the behavior. Gonna add more.
  5. brunoerg commented at 2:36 pm on June 21, 2023: contributor

    When we call setban RPC, it calls LookupSubNet.

    0if (!isSubnet) {
    1    const std::optional<CNetAddr> addr{LookupHost(request.params[0].get_str(), false)};
    2    if (addr.has_value()) {
    3        netAddr = addr.value();
    4    }
    5}
    6else
    7    LookupSubNet(request.params[0].get_str(), subNet);
    

    That’s why the following diff fails:

     0diff --git a/test/functional/rpc_setban.py b/test/functional/rpc_setban.py
     1index b4f3d77e5..93a19920c 100755
     2--- a/test/functional/rpc_setban.py
     3+++ b/test/functional/rpc_setban.py
     4@@ -25,6 +25,10 @@ class SetBanTests(BitcoinTestFramework):
     5         peerinfo = self.nodes[1].getpeerinfo()[0]
     6         assert not "noban" in peerinfo["permissions"]
     7 
     8+        subnet = "2e:6f6e:696f:6ef3:a080:b18d:5d5d:5d00%2038004089/121"
     9+        self.nodes[1].setban(subnet, "add")
    10+        assert self.is_banned(self.nodes[1], subnet)
    11+
    12         # Node 0 get banned by Node 1
    13         self.nodes[1].setban("127.0.0.1", "add")
    
  6. maflcko commented at 2:44 pm on June 21, 2023: member

    Sorry, I don’t follow.

    https://github.com/bitcoin/bitcoin/commit/fabed982ad9143cddaca8346f6b4c243dd84e0c4 re-enabled the assert assert(banmap == banmap_read) in banman:

    This is a commit that modifies the fuzz test, however your diffs are in functional tests or unit tests, so I fail to see how this is related to fuzzing.

  7. maflcko added the label Tests on Jun 21, 2023
  8. maflcko added the label Questions and Help on Jun 21, 2023
  9. mzumsande commented at 2:52 pm on June 21, 2023: contributor
    If the fuzz test fails, it would be good to just add the crashing seed here so that others can reproduce (convert to base64 before): See e.g. #17860#pullrequestreview-1410594057
  10. brunoerg commented at 2:59 pm on June 21, 2023: contributor

    Sorry for not being so clear, @MarcoFalke. I added the diffs in functional tests and unit tests to validate my idea why fuzz failed.

    Crash:

     0INFO: Running with entropic power schedule (0xFF, 100).
     1INFO: Seed: 3851287319
     2INFO: Loaded 1 modules   (1130675 inline 8-bit counters): 1130675 [0x107b6cd60, 0x107c80e13), 
     3INFO: Loaded 1 PC tables (1130675 PCs): 1130675 [0x107c80e18,0x108dc1948), 
     4src/test/fuzz/fuzz: Running 1 inputs 1 time(s) each.
     5Running: crash-cc17009262908f232f471481d1ad808e2bf6dc14
     6Assertion failed: (banmap == banmap_read), function banman_fuzz_target, file banman.cpp, line 112.
     7==79739== ERROR: libFuzzer: deadly signal
     8    [#0](/bitcoin-bitcoin/0/) 0x10a453ea4 in __sanitizer_print_stack_trace+0x28 (libclang_rt.asan_osx_dynamic.dylib:arm64+0x5bea4) (BuildId: 5c04277be4ee3a049b85963fe58ab4e132000000200000000100000000000b00)
     9    [#1](/bitcoin-bitcoin/1/) 0x1070bf970 in fuzzer::PrintStackTrace() FuzzerUtil.cpp:210
    10    [#2](/bitcoin-bitcoin/2/) 0x1070a3d8c in fuzzer::Fuzzer::CrashCallback() FuzzerLoop.cpp:233
    11    [#3](/bitcoin-bitcoin/3/) 0x18065c2a0 in _sigtramp+0x34 (libsystem_platform.dylib:arm64+0x42a0) (BuildId: 781896702f47332c9a59a210157aa97b32000000200000000100000000000d00)
    12    [#4](/bitcoin-bitcoin/4/) 0xfa7f80018062dce8  (<unknown module>)
    13    [#5](/bitcoin-bitcoin/5/) 0x51270001805672c4  (<unknown module>)
    14    [#6](/bitcoin-bitcoin/6/) 0x614a00018056661c  (<unknown module>)
    15    [#7](/bitcoin-bitcoin/7/) 0x382f000104c37c88  (<unknown module>)
    16    [#8](/bitcoin-bitcoin/8/) 0x1052468f8 in LLVMFuzzerTestOneInput fuzz.cpp:169
    17    [#9](/bitcoin-bitcoin/9/) 0x1070a51c8 in fuzzer::Fuzzer::ExecuteCallback(unsigned char const*, unsigned long) FuzzerLoop.cpp:617
    18    [#10](/bitcoin-bitcoin/10/) 0x107091590 in fuzzer::RunOneTest(fuzzer::Fuzzer*, char const*, unsigned long) FuzzerDriver.cpp:324
    19    [#11](/bitcoin-bitcoin/11/) 0x1070967c4 in fuzzer::FuzzerDriver(int*, char***, int (*)(unsigned char const*, unsigned long)) FuzzerDriver.cpp:860
    20    [#12](/bitcoin-bitcoin/12/) 0x1070c0bc0 in main FuzzerMain.cpp:20
    21    [#13](/bitcoin-bitcoin/13/) 0x180303e4c  (<unknown module>)
    22    [#14](/bitcoin-bitcoin/14/) 0x7d03fffffffffffc  (<unknown module>)
    23
    24NOTE: libFuzzer has rudimentary signal handlers.
    25      Combine libFuzzer with AddressSanitizer or similar for better crash reports.
    26SUMMARY: libFuzzer: deadly signal
    

    Seed:

    0X3J1bmViYX39GgAAAAAAAAD///8AACsAXAAAAFx00UUXXXQBFRUVFRUVFRUVFRVvLwB/AAAAgAABAAABAQcAAACRtJGdEZGRQAAAAMQgf38AQAqRkf/w/6cCAZG0kXl5eXl5eXl5ef//////////eXl5eXl5eXl5eXl5eXl5jMCDHsFtvdtVxH7U1agiqUM6FTiq9Tg1OfCMddTHrRhzOQ0wCFHRVS3D7kqAmf4ii4FzNYkn9XcN8ubYNitv6cgN9E1kKPbQJOCC2dYrPDwDDQHZQeqOD7K+uD8GdslieWK3h7OS/thwWMUdw+KmgryaSZvunotnNKkz/uq98HjtQrUH/LUmUeb7pTZHqTApZ3jXVmGS2Muo96HLI9g3d0EG5LHce+mRSy2jB6TFuBRAQpwjghLRiU+S75ltwhrmRUXBfa4kpmjq2FrBYiVbbTYisifxMsnvPS7ix+IwpTats2ewEGQITg/MeZbhvKcZxxczHeb6ht1PrRV4/o/msCwN2d8RVC0DYh2gqj1aC06cGMXgoZw+T3ll5CH8dghESnW98W3i283GUy/3tSwPV8GLot5X/DupHLge/RQxtmgnIJhXgq/UMzTL7XK9y1oMooLSPiDhJiVmrKE95f549o1H9UZXSx1mwGCqap51HHrCSsnjiP13Wn1+WtyEUUAObNBDhcSjuHMMWY95B938zoOKTbFpyY3gzAi5Z8ujR2KmnEaKT4MKAVGQAAAAAAAAAAAAAAAAAAAAAP5W0ABJaWjFneFMmuY9koAoGVtScppmwwOw9++Ufx0dTyvFjZHkROJ6mlu0UKCvY6sTccKSugFu0/QncpR5/DBzYqTSe0OKQSMhzIN2HQEAo05OWxU9XQsTKRfg/bSB1//EXudt4jZEIyns29ZRAAAAAAAAAAB5cXFxcXFxcXFxcXFxcXFxcXl5PgAAAAAAAABwkZiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmEAAAC5vbmlvbvOggLGNXV1dDV0NAABVlEQAXRAAP11d+gj/f7+12l1VlABdEF0AROA9//////8I/38I/yZ/CP9/CP9/CP9/CP9/B/9/CHl5eXn/////////////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeXl5eQB5ecJ5eQF0eXl5eXl5eXl5eXkAgDsAAACAeXkmeXmwV3P1HqaLvq9HJCO3LQzu6Khz1/N6ndp/+0uXhvDVw6ekexeobSVOnFS7455nfwXAfGVyqxh8mvHWMdOKECKCa6HLBzj/rHbPG+HNtG/wvAIH/Ca5znqueYtfLR05Q66eoEheVZbgZSZn9xtbTUOMCPf+fwZ/3/wCs5ve9RqjRhRopnTXzm6R53SyY8OhPkjZfmHekZiP4qpCUN0rFIU8cZojTVAUZWJjT7OKXmAgZ5GWTGuyos8GKQMfmo4KCFuwt0/0+x9aKSC2z5JDTqebow5cVrdEjrozEjNXNL36tvOaLdGvcMfJ8xlUmOjI6DU+pmEn4ZUXUxUu9CnwZ8ZsjJcs0bOiVJd5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eYeHeXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5fXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5/YfYfutDeXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXkAeXl5eeEeeXl5eXl6eYATE3l5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl9eXl5eQCAOwAAAIB5eXl5eQ==
    
  11. dergoegge commented at 3:15 pm on June 21, 2023: member
    @brunoerg I am unable to reproduce the crash with the input you provided (at d23cdf659e147e7040a3924fc20cfaf639bbf5db).
  12. maflcko commented at 3:19 pm on June 21, 2023: member

    Same here. It would be good to always include exact steps to reproduce.

     0$ sha1sum /tmp/a && FUZZ=banman ./src/test/fuzz/fuzz /tmp/a && echo $?
     1cc17009262908f232f471481d1ad808e2bf6dc14  /tmp/a
     2INFO: Running with entropic power schedule (0xFF, 100).
     3INFO: Seed: 2591147588
     4INFO: Loaded 1 modules   (344099 inline 8-bit counters): 344099 [0x5636c59992d0, 0x5636c59ed2f3), 
     5INFO: Loaded 1 PC tables (344099 PCs): 344099 [0x5636c59ed2f8,0x5636c5f2d528), 
     6./src/test/fuzz/fuzz: Running 1 inputs 1 time(s) each.
     7Running: /tmp/a
     8Executed /tmp/a in 38 ms
     9***
    10*** NOTE: fuzzing was not performed, you have only
    11***       executed the target code on a fixed set of inputs.
    12***
    130
    
  13. maflcko added the label macOS on Jun 21, 2023
  14. maflcko commented at 3:32 pm on June 21, 2023: member
    @brunoerg Can you try on Linux to check if this is a macOS specific issue?
  15. sr-gi commented at 4:01 pm on June 21, 2023: member

    @brunoerg Can you try on Linux to check if this is a macOS specific issue?

    I’m able to reproduce this on an Intel MacOS Ventura

    Unit

    0test/banman_tests.cpp:43: error: in "banman_tests/file": check sub_net.ToString() == suspect_subnet has failed [2e:6f6e:696f:6ef3:a080:b18d:5d5d:5d00%31097/121 != 2e:6f6e:696f:6ef3:a080:b18d:5d5d:5d00%2038004089/121]
    1
    2*** 1 failure is detected in the test module "Bitcoin Core Test Suite"
    

    Functional

     0> python3 test/functional/rpc_setban.py
     12023-06-21T16:00:35.882000Z TestFramework (INFO): PRNG seed is: 802306753754372222
     22023-06-21T16:00:35.883000Z TestFramework (INFO): Initializing test directory /var/folders/lx/mp4jlr6d3vg9lcv3t_q96n9w0000gn/T/bitcoin_func_test_9mzaqtet
     32023-06-21T16:00:37.108000Z TestFramework (ERROR): Assertion failed
     4Traceback (most recent call last):
     5  File "/Users/sergi/git/bitcoin/test/functional/test_framework/test_framework.py", line 132, in main
     6    self.run_test()
     7  File "/Users/sergi/git/bitcoin/test/functional/rpc_setban.py", line 30, in run_test
     8    assert self.is_banned(self.nodes[1], subnet)
     9AssertionError
    102023-06-21T16:00:37.167000Z TestFramework (INFO): Stopping nodes
    112023-06-21T16:00:37.643000Z TestFramework (WARNING): Not cleaning up dir /var/folders/lx/mp4jlr6d3vg9lcv3t_q96n9w0000gn/T/bitcoin_func_test_9mzaqtet
    122023-06-21T16:00:37.643000Z TestFramework (ERROR): Test failed. Test logging available at /var/folders/lx/mp4jlr6d3vg9lcv3t_q96n9w0000gn/T/bitcoin_func_test_9mzaqtet/test_framework.log
    132023-06-21T16:00:37.644000Z TestFramework (ERROR):
    142023-06-21T16:00:37.645000Z TestFramework (ERROR): Hint: Call /Users/sergi/git/bitcoin/test/functional/combine_logs.py '/var/folders/lx/mp4jlr6d3vg9lcv3t_q96n9w0000gn/T/bitcoin_func_test_9mzaqtet' to consolidate all logs
    152023-06-21T16:00:37.646000Z TestFramework (ERROR):
    162023-06-21T16:00:37.646000Z TestFramework (ERROR): If this failure happened unexpectedly or intermittently, please file a bug and provide a link or upload of the combined log.
    172023-06-21T16:00:37.646000Z TestFramework (ERROR): https://github.com/bitcoin/bitcoin/issues
    182023-06-21T16:00:37.646000Z TestFramework (ERROR):
    
  16. dergoegge commented at 4:03 pm on June 21, 2023: member

    I’m able to reproduce this on an Intel MacOS Ventura

    Also in the fuzz target with the input that bruno provided here: #27924 (comment) ?

    0$ echo "X3J1bmViYX39GgAAAAAAAAD///8AACsAXAAAAFx00UUXXXQBFRUVFRUVFRUVFRVvLwB/AAAAgAABAAABAQcAAACRtJGdEZGRQAAAAMQgf38AQAqRkf/w/6cCAZG0kXl5eXl5eXl5ef//////////eXl5eXl5eXl5eXl5eXl5jMCDHsFtvdtVxH7U1agiqUM6FTiq9Tg1OfCMddTHrRhzOQ0wCFHRVS3D7kqAmf4ii4FzNYkn9XcN8ubYNitv6cgN9E1kKPbQJOCC2dYrPDwDDQHZQeqOD7K+uD8GdslieWK3h7OS/thwWMUdw+KmgryaSZvunotnNKkz/uq98HjtQrUH/LUmUeb7pTZHqTApZ3jXVmGS2Muo96HLI9g3d0EG5LHce+mRSy2jB6TFuBRAQpwjghLRiU+S75ltwhrmRUXBfa4kpmjq2FrBYiVbbTYisifxMsnvPS7ix+IwpTats2ewEGQITg/MeZbhvKcZxxczHeb6ht1PrRV4/o/msCwN2d8RVC0DYh2gqj1aC06cGMXgoZw+T3ll5CH8dghESnW98W3i283GUy/3tSwPV8GLot5X/DupHLge/RQxtmgnIJhXgq/UMzTL7XK9y1oMooLSPiDhJiVmrKE95f549o1H9UZXSx1mwGCqap51HHrCSsnjiP13Wn1+WtyEUUAObNBDhcSjuHMMWY95B938zoOKTbFpyY3gzAi5Z8ujR2KmnEaKT4MKAVGQAAAAAAAAAAAAAAAAAAAAAP5W0ABJaWjFneFMmuY9koAoGVtScppmwwOw9++Ufx0dTyvFjZHkROJ6mlu0UKCvY6sTccKSugFu0/QncpR5/DBzYqTSe0OKQSMhzIN2HQEAo05OWxU9XQsTKRfg/bSB1//EXudt4jZEIyns29ZRAAAAAAAAAAB5cXFxcXFxcXFxcXFxcXFxcXl5PgAAAAAAAABwkZiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmEAAAC5vbmlvbvOggLGNXV1dDV0NAABVlEQAXRAAP11d+gj/f7+12l1VlABdEF0AROA9//////8I/38I/yZ/CP9/CP9/CP9/CP9/B/9/CHl5eXn/////////////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeXl5eQB5ecJ5eQF0eXl5eXl5eXl5eXkAgDsAAACAeXkmeXmwV3P1HqaLvq9HJCO3LQzu6Khz1/N6ndp/+0uXhvDVw6ekexeobSVOnFS7455nfwXAfGVyqxh8mvHWMdOKECKCa6HLBzj/rHbPG+HNtG/wvAIH/Ca5znqueYtfLR05Q66eoEheVZbgZSZn9xtbTUOMCPf+fwZ/3/wCs5ve9RqjRhRopnTXzm6R53SyY8OhPkjZfmHekZiP4qpCUN0rFIU8cZojTVAUZWJjT7OKXmAgZ5GWTGuyos8GKQMfmo4KCFuwt0/0+x9aKSC2z5JDTqebow5cVrdEjrozEjNXNL36tvOaLdGvcMfJ8xlUmOjI6DU+pmEn4ZUXUxUu9CnwZ8ZsjJcs0bOiVJd5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eYeHeXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5fXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5/YfYfutDeXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXkAeXl5eeEeeXl5eXl6eYATE3l5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl9eXl5eQCAOwAAAIB5eXl5eQ==" | base64 --decode > banman_crash.input
    1$ FUZZ=banman ./src/test/fuzz/fuzz banman_crash.input
    
  17. sr-gi commented at 4:05 pm on June 21, 2023: member

    I’m able to reproduce this on an Intel MacOS Ventura

    Also in the fuzz target with the input that bruno provided here: #27924 (comment) ?

    Sorry I should have been more specific.

    I haven’t tried the fuzz, will do that later and report back

  18. maflcko removed the label Questions and Help on Jun 21, 2023
  19. maflcko commented at 4:11 pm on June 21, 2023: member
    We should probably run the fuzz tests on Windows and macOS either in the CI or in the nightly CI
  20. mzumsande commented at 4:54 pm on June 21, 2023: contributor

    I’m able to reproduce this on an Intel MacOS Ventura

    For completeness, the diffs to the unit and functional tests from the OP don’t lead to errors for me (Ubuntu), so it’s definitely macOS related.

  21. brunoerg commented at 5:30 pm on June 21, 2023: contributor
    After some tests, I could realize the issue happens only in MacOS. I did more investigations and checked the issue is WrappedGetAddrInfo, could it be something with getaddrinfo call?
  22. sr-gi commented at 6:06 pm on June 21, 2023: member

    I’m able to reproduce this on an Intel MacOS Ventura

    Also in the fuzz target with the input that bruno provided here: #27924 (comment) ?

    0$ echo "X3J1bmViYX39GgAAAAAAAAD///8AACsAXAAAAFx00UUXXXQBFRUVFRUVFRUVFRVvLwB/AAAAgAABAAABAQcAAACRtJGdEZGRQAAAAMQgf38AQAqRkf/w/6cCAZG0kXl5eXl5eXl5ef//////////eXl5eXl5eXl5eXl5eXl5jMCDHsFtvdtVxH7U1agiqUM6FTiq9Tg1OfCMddTHrRhzOQ0wCFHRVS3D7kqAmf4ii4FzNYkn9XcN8ubYNitv6cgN9E1kKPbQJOCC2dYrPDwDDQHZQeqOD7K+uD8GdslieWK3h7OS/thwWMUdw+KmgryaSZvunotnNKkz/uq98HjtQrUH/LUmUeb7pTZHqTApZ3jXVmGS2Muo96HLI9g3d0EG5LHce+mRSy2jB6TFuBRAQpwjghLRiU+S75ltwhrmRUXBfa4kpmjq2FrBYiVbbTYisifxMsnvPS7ix+IwpTats2ewEGQITg/MeZbhvKcZxxczHeb6ht1PrRV4/o/msCwN2d8RVC0DYh2gqj1aC06cGMXgoZw+T3ll5CH8dghESnW98W3i283GUy/3tSwPV8GLot5X/DupHLge/RQxtmgnIJhXgq/UMzTL7XK9y1oMooLSPiDhJiVmrKE95f549o1H9UZXSx1mwGCqap51HHrCSsnjiP13Wn1+WtyEUUAObNBDhcSjuHMMWY95B938zoOKTbFpyY3gzAi5Z8ujR2KmnEaKT4MKAVGQAAAAAAAAAAAAAAAAAAAAAP5W0ABJaWjFneFMmuY9koAoGVtScppmwwOw9++Ufx0dTyvFjZHkROJ6mlu0UKCvY6sTccKSugFu0/QncpR5/DBzYqTSe0OKQSMhzIN2HQEAo05OWxU9XQsTKRfg/bSB1//EXudt4jZEIyns29ZRAAAAAAAAAAB5cXFxcXFxcXFxcXFxcXFxcXl5PgAAAAAAAABwkZiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmEAAAC5vbmlvbvOggLGNXV1dDV0NAABVlEQAXRAAP11d+gj/f7+12l1VlABdEF0AROA9//////8I/38I/yZ/CP9/CP9/CP9/CP9/B/9/CHl5eXn/////////////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeXl5eQB5ecJ5eQF0eXl5eXl5eXl5eXkAgDsAAACAeXkmeXmwV3P1HqaLvq9HJCO3LQzu6Khz1/N6ndp/+0uXhvDVw6ekexeobSVOnFS7455nfwXAfGVyqxh8mvHWMdOKECKCa6HLBzj/rHbPG+HNtG/wvAIH/Ca5znqueYtfLR05Q66eoEheVZbgZSZn9xtbTUOMCPf+fwZ/3/wCs5ve9RqjRhRopnTXzm6R53SyY8OhPkjZfmHekZiP4qpCUN0rFIU8cZojTVAUZWJjT7OKXmAgZ5GWTGuyos8GKQMfmo4KCFuwt0/0+x9aKSC2z5JDTqebow5cVrdEjrozEjNXNL36tvOaLdGvcMfJ8xlUmOjI6DU+pmEn4ZUXUxUu9CnwZ8ZsjJcs0bOiVJd5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eYeHeXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5fXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5/YfYfutDeXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXkAeXl5eeEeeXl5eXl6eYATE3l5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl9eXl5eQCAOwAAAIB5eXl5eQ==" | base64 --decode > banman_crash.input
    1$ FUZZ=banman ./src/test/fuzz/fuzz banman_crash.input
    

    I was also able to reproduce this.

     0fuzz(26710,0x7ff84ab44640) malloc: nano zone abandoned due to inability to reserve vm space.
     1INFO: Running with entropic power schedule (0xFF, 100).
     2INFO: Seed: 2487386717
     3INFO: Loaded 1 modules   (1139295 inline 8-bit counters): 1139295 [0x103800bb8, 0x103916e17),
     4INFO: Loaded 1 PC tables (1139295 PCs): 1139295 [0x103916e18,0x104a79408),
     5./src/test/fuzz/fuzz: Running 1 inputs 1 time(s) each.
     6Running: banman_crash.input
     7Assertion failed: (banmap == banmap_read), function banman_fuzz_target, file banman.cpp, line 112.
     8==26710== ERROR: libFuzzer: deadly signal
     9    [#0](/bitcoin-bitcoin/0/) 0x1062e1fc5 in __sanitizer_print_stack_trace+0x35 (libclang_rt.asan_osx_dynamic.dylib:x86_64h+0xeafc5) (BuildId: ee4eaac7009837bb882d9429775389b32400000010000000000a0a0000030d00)
    10    [#1](/bitcoin-bitcoin/1/) 0x102e9a928 in fuzzer::PrintStackTrace() FuzzerUtil.cpp:210
    11    [#2](/bitcoin-bitcoin/2/) 0x102e7d793 in fuzzer::Fuzzer::CrashCallback() FuzzerLoop.cpp:233
    12    [#3](/bitcoin-bitcoin/3/) 0x7ff8074955ec in _sigtramp+0x1c (libsystem_platform.dylib:x86_64+0x35ec) (BuildId: 4ff3bd2f21673ee6a55d384703bdf1f5240000001000000000040d0000040d00)
    13
    14NOTE: libFuzzer has rudimentary signal handlers.
    15      Combine libFuzzer with AddressSanitizer or similar for better crash reports.
    16SUMMARY: libFuzzer: deadly signal
    
  23. brunoerg commented at 7:07 pm on June 21, 2023: contributor

    After some tests, I could realize the issue happens only in MacOS. I did more investigations and checked the issue is WrappedGetAddrInfo, could it be something with getaddrinfo call?

    During a lookup it seems MacOS changes the interface/scope id whether it’s an incorrect or invalid one is being used and seems like Linux doesn’t do it, it relies on the user/app. That would be why the failure only happens in MacOS.

    Any other ideas?

  24. dergoegge commented at 8:53 am on June 22, 2023: member

    I did more investigations and checked the issue is WrappedGetAddrInfo, could it be something with getaddrinfo call?

    Unless there is a bug, fuzz harnesses are not able to perform dns lookups.

    https://github.com/bitcoin/bitcoin/blob/0c84a0e4841f00d931aa7339e9aa8f26eb2f3a61/src/test/fuzz/fuzz.cpp#L77-L83

  25. maflcko commented at 9:31 am on June 22, 2023: member

    We should probably run the fuzz tests on Windows and macOS either in the CI or in the nightly CI

    See https://github.com/bitcoin/bitcoin/pull/27932

  26. brunoerg commented at 1:08 pm on June 22, 2023: contributor

    Unless there is a bug, fuzz harnesses are not able to perform dns lookups. @dergoegge, Seems we’re not doing dns lookups. What happens is thatLookupSubNet calls LookupHost with fAllowLookup=false. See:

    0bool LookupSubNet(const std::string& subnet_str, CSubNet& subnet_out)
    1{
    2    if (!ContainsNoNUL(subnet_str)) {
    3        return false;
    4    }
    5
    6    const size_t slash_pos{subnet_str.find_last_of('/')};
    7    const std::string str_addr{subnet_str.substr(0, slash_pos)};
    8    const std::optional<CNetAddr> addr{LookupHost(str_addr, /*fAllowLookup=*/false)};
    

    So it will call WrappedGetAddrInfo and consequently call getaddrinfo with AI_NUMERICHOST.

    See:

     0std::vector<CNetAddr> WrappedGetAddrInfo(const std::string& name, bool allow_lookup)
     1{
     2    addrinfo ai_hint{};
     3    // We want a TCP port, which is a streaming socket type
     4    ai_hint.ai_socktype = SOCK_STREAM;
     5    ai_hint.ai_protocol = IPPROTO_TCP;
     6    // We don't care which address family (IPv4 or IPv6) is returned
     7    ai_hint.ai_family = AF_UNSPEC;
     8    // If we allow lookups of hostnames, use the AI_ADDRCONFIG flag to only
     9    // return addresses whose family we have an address configured for.
    10    //
    11    // If we don't allow lookups, then use the AI_NUMERICHOST flag for
    12    // getaddrinfo to only decode numerical network addresses and suppress
    13    // hostname lookups.
    14    ai_hint.ai_flags = allow_lookup ? AI_ADDRCONFIG : AI_NUMERICHOST;
    15
    16    addrinfo* ai_res{nullptr};
    17    const int n_err{getaddrinfo(name.c_str(), nullptr, &ai_hint, &ai_res)};
    18    if (n_err != 0) {
    19        return {};
    20    }
    21
    22    // Traverse the linked list starting with ai_trav.
    23    addrinfo* ai_trav{ai_res};
    24    std::vector<CNetAddr> resolved_addresses;
    25    while (ai_trav != nullptr) {
    26        if (ai_trav->ai_family == AF_INET) {
    27            assert(ai_trav->ai_addrlen >= sizeof(sockaddr_in));
    28            resolved_addresses.emplace_back(reinterpret_cast<sockaddr_in*>(ai_trav->ai_addr)->sin_addr);
    29        }
    30        if (ai_trav->ai_family == AF_INET6) {
    31            assert(ai_trav->ai_addrlen >= sizeof(sockaddr_in6));
    32            const sockaddr_in6* s6{reinterpret_cast<sockaddr_in6*>(ai_trav->ai_addr)};
    33            resolved_addresses.emplace_back(s6->sin6_addr, s6->sin6_scope_id);
    34        }
    35        ai_trav = ai_trav->ai_next;
    36    }
    37    freeaddrinfo(ai_res);
    38
    39    return resolved_addresses;
    40}
    
  27. jonatack commented at 10:35 pm on September 8, 2023: contributor

    Got this with macOS Ventura 13.0.

    Reproduced the crash on current master @ 4e1a38c6df91f96ca8a2ef07413ffdb1d59c30cc with ARM64 M1 Max, macOS Ventura 13.5.2 (latest patch release).

     0master =:~/bitcoin/bitcoin$ echo "X3J1bmViYX39GgAAAAAAAAD///8AACsAXAAAAFx00UUXXXQBFRUVFRUVFRUVFRVvLwB/AAAAgAABAAABAQcAAACRtJGdEZGRQAAAAMQgf38AQAqRkf/w/6cCAZG0kXl5eXl5eXl5ef//////////eXl5eXl5eXl5eXl5eXl5jMCDHsFtvdtVxH7U1agiqUM6FTiq9Tg1OfCMddTHrRhzOQ0wCFHRVS3D7kqAmf4ii4FzNYkn9XcN8ubYNitv6cgN9E1kKPbQJOCC2dYrPDwDDQHZQeqOD7K+uD8GdslieWK3h7OS/thwWMUdw+KmgryaSZvunotnNKkz/uq98HjtQrUH/LUmUeb7pTZHqTApZ3jXVmGS2Muo96HLI9g3d0EG5LHce+mRSy2jB6TFuBRAQpwjghLRiU+S75ltwhrmRUXBfa4kpmjq2FrBYiVbbTYisifxMsnvPS7ix+IwpTats2ewEGQITg/MeZbhvKcZxxczHeb6ht1PrRV4/o/msCwN2d8RVC0DYh2gqj1aC06cGMXgoZw+T3ll5CH8dghESnW98W3i283GUy/3tSwPV8GLot5X/DupHLge/RQxtmgnIJhXgq/UMzTL7XK9y1oMooLSPiDhJiVmrKE95f549o1H9UZXSx1mwGCqap51HHrCSsnjiP13Wn1+WtyEUUAObNBDhcSjuHMMWY95B938zoOKTbFpyY3gzAi5Z8ujR2KmnEaKT4MKAVGQAAAAAAAAAAAAAAAAAAAAAP5W0ABJaWjFneFMmuY9koAoGVtScppmwwOw9++Ufx0dTyvFjZHkROJ6mlu0UKCvY6sTccKSugFu0/QncpR5/DBzYqTSe0OKQSMhzIN2HQEAo05OWxU9XQsTKRfg/bSB1//EXudt4jZEIyns29ZRAAAAAAAAAAB5cXFxcXFxcXFxcXFxcXFxcXl5PgAAAAAAAABwkZiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmEAAAC5vbmlvbvOggLGNXV1dDV0NAABVlEQAXRAAP11d+gj/f7+12l1VlABdEF0AROA9//////8I/38I/yZ/CP9/CP9/CP9/CP9/B/9/CHl5eXn/////////////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeXl5eQB5ecJ5eQF0eXl5eXl5eXl5eXkAgDsAAACAeXkmeXmwV3P1HqaLvq9HJCO3LQzu6Khz1/N6ndp/+0uXhvDVw6ekexeobSVOnFS7455nfwXAfGVyqxh8mvHWMdOKECKCa6HLBzj/rHbPG+HNtG/wvAIH/Ca5znqueYtfLR05Q66eoEheVZbgZSZn9xtbTUOMCPf+fwZ/3/wCs5ve9RqjRhRopnTXzm6R53SyY8OhPkjZfmHekZiP4qpCUN0rFIU8cZojTVAUZWJjT7OKXmAgZ5GWTGuyos8GKQMfmo4KCFuwt0/0+x9aKSC2z5JDTqebow5cVrdEjrozEjNXNL36tvOaLdGvcMfJ8xlUmOjI6DU+pmEn4ZUXUxUu9CnwZ8ZsjJcs0bOiVJd5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eYeHeXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5fXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5/YfYfutDeXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXkAeXl5eeEeeXl5eXl6eYATE3l5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl9eXl5eQCAOwAAAIB5eXl5eQ==" | base64 --decode > banman_crash.input
     1
     2master =:~/bitcoin/bitcoin$ FUZZ=banman ./src/test/fuzz/fuzz banman_crash.input
     3fuzz(56388,0x1e01c6080) malloc: nano zone abandoned due to inability to reserve vm space.
     4INFO: Running with entropic power schedule (0xFF, 100).
     5INFO: Seed: 2481252170
     6INFO: Loaded 1 modules   (1144591 inline 8-bit counters): 1144591 [0x10756abe0, 0x1076822ef), 
     7INFO: Loaded 1 PC tables (1144591 PCs): 1144591 [0x1076822f0,0x1087f93e0), 
     8./src/test/fuzz/fuzz: Running 1 inputs 1 time(s) each.
     9Running: banman_crash.input
    10Assertion failed: (banmap == banmap_read), function banman_fuzz_target, file banman.cpp, line 112.
    11==56388== ERROR: libFuzzer: deadly signal
    12    [#0](/bitcoin-bitcoin/0/) 0x109e87ea4 in __sanitizer_print_stack_trace+0x28 (libclang_rt.asan_osx_dynamic.dylib:arm64+0x5bea4) (BuildId: 4947f3677e4435f39b5765e7dbc19bf732000000200000000100000000000b00)
    13    [#1](/bitcoin-bitcoin/1/) 0x106a84b6c in fuzzer::PrintStackTrace() FuzzerUtil.cpp:210
    14    [#2](/bitcoin-bitcoin/2/) 0x106a68f88 in fuzzer::Fuzzer::CrashCallback() FuzzerLoop.cpp:233
    15    [#3](/bitcoin-bitcoin/3/) 0x185172a20 in _sigtramp+0x34 (libsystem_platform.dylib:arm64+0x3a20) (BuildId: 6d4583543c393f35a3bbd01a78817b4a32000000200000000100000000050d00)
    16    [#4](/bitcoin-bitcoin/4/) 0x8322800185143c24  (<unknown module>)
    17    [#5](/bitcoin-bitcoin/5/) 0x7150000185051ae4  (<unknown module>)
    18    [#6](/bitcoin-bitcoin/6/) 0xc339000185050e40  (<unknown module>)
    19    [#7](/bitcoin-bitcoin/7/) 0x8e16800104594544  (<unknown module>)
    20    [#8](/bitcoin-bitcoin/8/) 0x104bf426c in LLVMFuzzerTestOneInput fuzz.cpp:174
    21    [#9](/bitcoin-bitcoin/9/) 0x106a6a3c4 in fuzzer::Fuzzer::ExecuteCallback(unsigned char const*, unsigned long) FuzzerLoop.cpp:617
    22    [#10](/bitcoin-bitcoin/10/) 0x106a5678c in fuzzer::RunOneTest(fuzzer::Fuzzer*, char const*, unsigned long) FuzzerDriver.cpp:324
    23    [#11](/bitcoin-bitcoin/11/) 0x106a5b9c0 in fuzzer::FuzzerDriver(int*, char***, int (*)(unsigned char const*, unsigned long)) FuzzerDriver.cpp:860
    24    [#12](/bitcoin-bitcoin/12/) 0x106a85dbc in main FuzzerMain.cpp:20
    25    [#13](/bitcoin-bitcoin/13/) 0x184debf24  (<unknown module>)
    26    [#14](/bitcoin-bitcoin/14/) 0xb2687ffffffffffc  (<unknown module>)
    27
    28NOTE: libFuzzer has rudimentary signal handlers.
    29      Combine libFuzzer with AddressSanitizer or similar for better crash reports.
    30SUMMARY: libFuzzer: deadly signal
    
  28. fanquake commented at 10:25 am on October 23, 2023: member

    See similar failure from #27071 (comment):

    This crashes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=63434

    0echo '////ICAgICAgICD/ICAgIAYgICAgeXn/ICAgIAAAAIAgIP8gICA=' | base64 --decode > /tmp/minimized-banman-crash
    1FUZZ=banman ./src/test/fuzz/fuzz /tmp/minimized-banman-crash
    2
    3
    4fuzz: test/fuzz/banman.cpp:112: void banman_fuzz_target(FuzzBufferType): Assertion `banmap == banmap_read' failed.
    
    09482cb780fe04c1f1d9050edd1b8e549e52c86ce is the first bad commit
    1commit 9482cb780fe04c1f1d9050edd1b8e549e52c86ce
    2Author: Vasil Dimov <vd@FreeBSD.org>
    3Date:   Tue Feb 7 15:16:57 2023 +0100
    4
    5    netbase: possibly change the result of LookupSubNet() to CJDNS
    
  29. fanquake closed this on Nov 13, 2023


github-metadata-mirror

This is a metadata mirror of the GitHub repository bitcoin/bitcoin. This site is not affiliated with GitHub. Content is generated from a GitHub metadata backup.
generated: 2024-10-06 07:12 UTC

This site is hosted by @0xB10C
More mirrored repositories can be found on mirror.b10c.me