Skip to content

Commit 6e21ded

Browse files
committed
Merge bitcoin/bitcoin#31130: Drop miniupnp dependency
40e5f26 mapport: remove dead code in DispatchMapPort (Antoine Poinsot) 38fdf7c mapport: drop outdated comments (Antoine Poinsot) b7b2435 doc: add release note for #31130 (Antoine Poinsot) 1b6dec9 depends: drop miniupnpc (Antoine Poinsot) 953533d doc: remove mentions of UPnP (Antoine Poinsot) 94ad614 ci: remove UPnP options (Antoine Poinsot) a9598e5 build: drop miniupnpc dependency (Antoine Poinsot) a5fcfb7 interfaces: remove now unused 'use_upnp' arg from 'mapPort' (Antoine Poinsot) 038bbe7 daemon: remove UPnP support (Antoine Poinsot) 844770b qt: remove UPnP settings (Antoine Poinsot) Pull request description: This PR removes UPnP IGD support and drops our [miniupnp](https://github.com/miniupnp/miniupnp) dependency. Miniupnpc is a C library (somewhat) maintained by a single person which had several vulnerabilities in the past (a couple dozens are listed [here](https://cve.mitre.org/cgi-bin/cvekey.cgi?keyword=miniupnp)), some of which directly affected our software ([RCE in 2015](https://bitcoincore.org/en/2024/07/03/disclose_upnp_rce/), [OOM in 2020](https://bitcoincore.org/en/2024/07/31/disclose-upnp-oom/)). The main purpose of this functionality is to have more (non-data-center) reachable nodes on the network. For a non-technical user running Bitcoin Core at home, the software would automatically open a port on their router to receive incoming connections. This way, users not able to manually open a port on their router would still provide the network with more resources and enhance its diversity. However, due to past vulnerabilities (and a worry about unknown future ones) in miniupnpc this feature was disabled by default in bitcoin/bitcoin#6795. Having it disabled by default kills (most of?) the purpose of having this functionality in the first place: someone technical enough to understand the `-upnp` startup option or the "enable UPnP" setting is most likely able to open a port on his box in the first place. In addition, laanwj implemented PCP with a NAT-PMP fallback directly in Bitcoin Core in bitcoin/bitcoin#30043. If we ever want to re-enable automatic NAT traversal by default in Bitcoin Core, this is the best option (and in my opinion the only sane one). The NAT-PMP fallback makes it so compatibility shouldn't be (much of) an issue. On balance, i believe that keeping this functionality and this barely maintained C dependency has higher costs than benefits. Therefore i propose that we get rid of it. ACKs for top commit: jarolrod: ACK bitcoin/bitcoin@40e5f26 1440000bytes: Code Review ACK bitcoin/bitcoin@40e5f26 laanwj: Code review ACK 40e5f26 i-am-yuvi: Tested ACK 40e5f26 Tree-SHA512: 9ea48662775510f5ec6de7af65790f7c8d211603398e9d8c634a86387be81b28081419a95b4d6680d3d7fe6a9f16cec99f16516548201dc7e49781909899a657
2 parents 2a52718 + 40e5f26 commit 6e21ded

40 files changed

+45
-428
lines changed

.github/workflows/ci.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -67,12 +67,12 @@ jobs:
6767
echo "TEST_BASE=$(git rev-list -n$((${{ env.MAX_COUNT }} + 1)) --reverse HEAD $EXCLUDE_MERGE_BASE_ANCESTORS | head -1)" >> "$GITHUB_ENV"
6868
- run: |
6969
sudo apt-get update
70-
sudo apt-get install clang ccache build-essential cmake pkg-config python3-zmq libevent-dev libboost-dev libsqlite3-dev libdb++-dev systemtap-sdt-dev libminiupnpc-dev libzmq3-dev qtbase5-dev qttools5-dev qttools5-dev-tools qtwayland5 libqrencode-dev -y
70+
sudo apt-get install clang ccache build-essential cmake pkg-config python3-zmq libevent-dev libboost-dev libsqlite3-dev libdb++-dev systemtap-sdt-dev libzmq3-dev qtbase5-dev qttools5-dev qttools5-dev-tools qtwayland5 libqrencode-dev -y
7171
- name: Compile and run tests
7272
run: |
7373
# Run tests on commits after the last merge commit and before the PR head commit
7474
# Use clang++, because it is a bit faster and uses less memory than g++
75-
git rebase --exec "echo Running test-one-commit on \$( git log -1 ) && CC=clang CXX=clang++ cmake -B build -DWERROR=ON -DWITH_ZMQ=ON -DBUILD_GUI=ON -DBUILD_BENCH=ON -DBUILD_FUZZ_BINARY=ON -DWITH_BDB=ON -DWITH_MINIUPNPC=ON -DWITH_USDT=ON && cmake --build build -j $(nproc) && ctest --output-on-failure --test-dir build -j $(nproc) && ./build/test/functional/test_runner.py -j $(( $(nproc) * 2 ))" ${{ env.TEST_BASE }}
75+
git rebase --exec "echo Running test-one-commit on \$( git log -1 ) && CC=clang CXX=clang++ cmake -B build -DWERROR=ON -DWITH_ZMQ=ON -DBUILD_GUI=ON -DBUILD_BENCH=ON -DBUILD_FUZZ_BINARY=ON -DWITH_BDB=ON -DWITH_USDT=ON && cmake --build build -j $(nproc) && ctest --output-on-failure --test-dir build -j $(nproc) && ./build/test/functional/test_runner.py -j $(( $(nproc) * 2 ))" ${{ env.TEST_BASE }}
7676
7777
macos-native-arm64:
7878
name: 'macOS 14 native, arm64, no depends, sqlite only, gui'
@@ -105,7 +105,7 @@ jobs:
105105
run: |
106106
# A workaround for "The `brew link` step did not complete successfully" error.
107107
brew install --quiet python@3 || brew link --overwrite python@3
108-
brew install --quiet coreutils ninja pkg-config gnu-getopt ccache boost libevent miniupnpc zeromq qt@5 qrencode
108+
brew install --quiet coreutils ninja pkg-config gnu-getopt ccache boost libevent zeromq qt@5 qrencode
109109
110110
- name: Set Ccache directory
111111
run: echo "CCACHE_DIR=${RUNNER_TEMP}/ccache_dir" >> "$GITHUB_ENV"
@@ -182,7 +182,7 @@ jobs:
182182

183183
- name: Generate build system
184184
run: |
185-
cmake -B build --preset vs2022-static -DCMAKE_TOOLCHAIN_FILE="$env:VCPKG_INSTALLATION_ROOT\scripts\buildsystems\vcpkg.cmake" -DBUILD_GUI=ON -DWITH_BDB=ON -DWITH_MINIUPNPC=ON -DWITH_ZMQ=ON -DBUILD_BENCH=ON -DBUILD_FUZZ_BINARY=ON -DWERROR=ON
185+
cmake -B build --preset vs2022-static -DCMAKE_TOOLCHAIN_FILE="$env:VCPKG_INSTALLATION_ROOT\scripts\buildsystems\vcpkg.cmake" -DBUILD_GUI=ON -DWITH_BDB=ON -DWITH_ZMQ=ON -DBUILD_BENCH=ON -DBUILD_FUZZ_BINARY=ON -DWERROR=ON
186186
187187
- name: Save vcpkg binary cache
188188
uses: actions/cache/save@v4

CMakeLists.txt

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -121,11 +121,6 @@ option(REDUCE_EXPORTS "Attempt to reduce exported symbols in the resulting execu
121121
option(WERROR "Treat compiler warnings as errors." OFF)
122122
option(WITH_CCACHE "Attempt to use ccache for compiling." ON)
123123

124-
option(WITH_MINIUPNPC "Enable UPnP." OFF)
125-
if(WITH_MINIUPNPC)
126-
find_package(MiniUPnPc MODULE REQUIRED)
127-
endif()
128-
129124
option(WITH_ZMQ "Enable ZMQ notifications." OFF)
130125
if(WITH_ZMQ)
131126
if(VCPKG_TARGET_TRIPLET)
@@ -234,7 +229,6 @@ if(BUILD_FOR_FUZZING)
234229
set(BUILD_WALLET_TOOL OFF)
235230
set(BUILD_GUI OFF)
236231
set(ENABLE_EXTERNAL_SIGNER OFF)
237-
set(WITH_MINIUPNPC OFF)
238232
set(WITH_ZMQ OFF)
239233
set(BUILD_TESTS OFF)
240234
set(BUILD_GUI_TESTS OFF)
@@ -612,7 +606,6 @@ if(ENABLE_WALLET)
612606
message(" - legacy wallets (Berkeley DB) ..... ${WITH_BDB}")
613607
endif()
614608
message(" external signer ..................... ${ENABLE_EXTERNAL_SIGNER}")
615-
message(" port mapping using UPnP ............. ${WITH_MINIUPNPC}")
616609
message(" ZeroMQ .............................. ${WITH_ZMQ}")
617610
message(" USDT tracing ........................ ${WITH_USDT}")
618611
message(" QR code (GUI) ....................... ${WITH_QRENCODE}")

CMakePresets.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,6 @@
8484
"ENABLE_WALLET": "ON",
8585
"WARN_INCOMPATIBLE_BDB": "OFF",
8686
"WITH_BDB": "ON",
87-
"WITH_MINIUPNPC": "ON",
8887
"WITH_MULTIPROCESS": "ON",
8988
"WITH_QRENCODE": "ON",
9089
"WITH_SQLITE": "ON",

ci/test/00_setup_env_mac_native.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ export LC_ALL=C.UTF-8
1111
export PIP_PACKAGES="--break-system-packages zmq"
1212
export GOAL="install"
1313
export CMAKE_GENERATOR="Ninja"
14-
export BITCOIN_CONFIG="-DBUILD_GUI=ON -DWITH_ZMQ=ON -DWITH_MINIUPNPC=ON -DREDUCE_EXPORTS=ON"
14+
export BITCOIN_CONFIG="-DBUILD_GUI=ON -DWITH_ZMQ=ON -DREDUCE_EXPORTS=ON"
1515
export CI_OS_NAME="macos"
1616
export NO_DEPENDS=1
1717
export OSX_SDK=""

ci/test/00_setup_env_native_asan.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ else
1919
fi
2020

2121
export CONTAINER_NAME=ci_native_asan
22-
export PACKAGES="systemtap-sdt-dev clang-18 llvm-18 libclang-rt-18-dev python3-zmq qtbase5-dev qttools5-dev qttools5-dev-tools libevent-dev libboost-dev libdb5.3++-dev libminiupnpc-dev libzmq3-dev libqrencode-dev libsqlite3-dev ${BPFCC_PACKAGE}"
22+
export PACKAGES="systemtap-sdt-dev clang-18 llvm-18 libclang-rt-18-dev python3-zmq qtbase5-dev qttools5-dev qttools5-dev-tools libevent-dev libboost-dev libdb5.3++-dev libzmq3-dev libqrencode-dev libsqlite3-dev ${BPFCC_PACKAGE}"
2323
export NO_DEPENDS=1
2424
export GOAL="install"
2525
export BITCOIN_CONFIG="\

ci/test/00_setup_env_native_previous_releases.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ export CONTAINER_NAME=ci_native_previous_releases
1010
export CI_IMAGE_NAME_TAG="docker.io/ubuntu:22.04"
1111
# Use minimum supported python3.10 and gcc-11, see doc/dependencies.md
1212
export PACKAGES="gcc-11 g++-11 python3-zmq"
13-
export DEP_OPTS="NO_UPNP=1 DEBUG=1 CC=gcc-11 CXX=g++-11"
13+
export DEP_OPTS="DEBUG=1 CC=gcc-11 CXX=g++-11"
1414
export TEST_RUNNER_EXTRA="--previous-releases --coverage --extended --exclude feature_dbcrash" # Run extended tests so that coverage does not fail, but exclude the very slow dbcrash
1515
export RUN_UNIT_TESTS_SEQUENTIAL="true"
1616
export RUN_UNIT_TESTS="false"

ci/test/00_setup_env_native_tidy.sh

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ export LC_ALL=C.UTF-8
99
export CI_IMAGE_NAME_TAG="docker.io/ubuntu:24.04"
1010
export CONTAINER_NAME=ci_native_tidy
1111
export TIDY_LLVM_V="18"
12-
export PACKAGES="clang-${TIDY_LLVM_V} libclang-${TIDY_LLVM_V}-dev llvm-${TIDY_LLVM_V}-dev libomp-${TIDY_LLVM_V}-dev clang-tidy-${TIDY_LLVM_V} jq libevent-dev libboost-dev libminiupnpc-dev libzmq3-dev systemtap-sdt-dev qtbase5-dev qttools5-dev qttools5-dev-tools libqrencode-dev libsqlite3-dev libdb++-dev"
12+
export PACKAGES="clang-${TIDY_LLVM_V} libclang-${TIDY_LLVM_V}-dev llvm-${TIDY_LLVM_V}-dev libomp-${TIDY_LLVM_V}-dev clang-tidy-${TIDY_LLVM_V} jq libevent-dev libboost-dev libzmq3-dev systemtap-sdt-dev qtbase5-dev qttools5-dev qttools5-dev-tools libqrencode-dev libsqlite3-dev libdb++-dev"
1313
export NO_DEPENDS=1
1414
export RUN_UNIT_TESTS=false
1515
export RUN_FUNCTIONAL_TESTS=false
@@ -18,7 +18,7 @@ export RUN_CHECK_DEPS=true
1818
export RUN_TIDY=true
1919
export GOAL="install"
2020
export BITCOIN_CONFIG="\
21-
-DWITH_ZMQ=ON -DBUILD_GUI=ON -DBUILD_BENCH=ON -DWITH_MINIUPNPC=ON -DWITH_USDT=ON -DWITH_BDB=ON -DWARN_INCOMPATIBLE_BDB=OFF \
21+
-DWITH_ZMQ=ON -DBUILD_GUI=ON -DBUILD_BENCH=ON -DWITH_USDT=ON -DWITH_BDB=ON -DWARN_INCOMPATIBLE_BDB=OFF \
2222
-DENABLE_HARDENING=OFF \
2323
-DCMAKE_C_COMPILER=clang-${TIDY_LLVM_V} \
2424
-DCMAKE_CXX_COMPILER=clang++-${TIDY_LLVM_V} \

ci/test/00_setup_env_native_valgrind.sh

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,14 @@ export LC_ALL=C.UTF-8
88

99
export CI_IMAGE_NAME_TAG="docker.io/ubuntu:24.04"
1010
export CONTAINER_NAME=ci_native_valgrind
11-
export PACKAGES="valgrind clang-16 llvm-16 libclang-rt-16-dev python3-zmq libevent-dev libboost-dev libdb5.3++-dev libminiupnpc-dev libzmq3-dev libsqlite3-dev"
11+
export PACKAGES="valgrind clang-16 llvm-16 libclang-rt-16-dev python3-zmq libevent-dev libboost-dev libdb5.3++-dev libzmq3-dev libsqlite3-dev"
1212
export USE_VALGRIND=1
1313
export NO_DEPENDS=1
1414
export TEST_RUNNER_EXTRA="--exclude feature_init,rpc_bind,feature_bind_extra" # feature_init excluded for now, see https://github.com/bitcoin/bitcoin/issues/30011 ; bind tests excluded for now, see https://github.com/bitcoin/bitcoin/issues/17765#issuecomment-602068547
1515
export GOAL="install"
1616
# TODO enable GUI
1717
export BITCOIN_CONFIG="\
18-
-DWITH_ZMQ=ON -DWITH_BDB=ON -DWITH_MINIUPNPC=ON -DWARN_INCOMPATIBLE_BDB=OFF -DBUILD_GUI=OFF \
18+
-DWITH_ZMQ=ON -DWITH_BDB=ON -DWARN_INCOMPATIBLE_BDB=OFF -DBUILD_GUI=OFF \
1919
-DCMAKE_C_COMPILER=clang-16 \
2020
-DCMAKE_CXX_COMPILER=clang++-16 \
2121
"

cmake/module/FindMiniUPnPc.cmake

Lines changed: 0 additions & 84 deletions
This file was deleted.

depends/Makefile

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@ NO_BDB ?=
4040
NO_SQLITE ?=
4141
NO_WALLET ?=
4242
NO_ZMQ ?=
43-
NO_UPNP ?=
4443
NO_USDT ?=
4544
MULTIPROCESS ?=
4645
LTO ?=
@@ -157,13 +156,11 @@ bdb_packages_$(NO_BDB) = $(bdb_packages)
157156
sqlite_packages_$(NO_SQLITE) = $(sqlite_packages)
158157
wallet_packages_$(NO_WALLET) = $(bdb_packages_) $(sqlite_packages_)
159158

160-
upnp_packages_$(NO_UPNP) = $(upnp_packages)
161-
162159
zmq_packages_$(NO_ZMQ) = $(zmq_packages)
163160
multiprocess_packages_$(MULTIPROCESS) = $(multiprocess_packages)
164161
usdt_packages_$(NO_USDT) = $(usdt_$(host_os)_packages)
165162

166-
packages += $($(host_arch)_$(host_os)_packages) $($(host_os)_packages) $(boost_packages_) $(libevent_packages_) $(qt_packages_) $(wallet_packages_) $(upnp_packages_) $(usdt_packages_)
163+
packages += $($(host_arch)_$(host_os)_packages) $($(host_os)_packages) $(boost_packages_) $(libevent_packages_) $(qt_packages_) $(wallet_packages_) $(usdt_packages_)
167164
native_packages += $($(host_arch)_$(host_os)_native_packages) $($(host_os)_native_packages)
168165

169166
ifneq ($(zmq_packages_),)
@@ -231,7 +228,6 @@ $(host_prefix)/toolchain.cmake : toolchain.cmake.in $(host_prefix)/.stamp_$(fina
231228
-e 's|@wallet_packages@|$(wallet_packages_)|' \
232229
-e 's|@bdb_packages@|$(bdb_packages_)|' \
233230
-e 's|@sqlite_packages@|$(sqlite_packages_)|' \
234-
-e 's|@upnp_packages@|$(upnp_packages_)|' \
235231
-e 's|@usdt_packages@|$(usdt_packages_)|' \
236232
-e 's|@no_harden@|$(NO_HARDEN)|' \
237233
-e 's|@multiprocess@|$(MULTIPROCESS)|' \

0 commit comments

Comments
 (0)