summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorJulian Andres Klode <jak@debian.org>2025-10-20 17:14:31 +0200
committerJulian Andres Klode <jak@debian.org>2025-10-20 17:16:45 +0200
commit6aca3716f051b5b6bff63d51fff68b9c7ebc7474 (patch)
treecd51616b1f6b42c7d3e53a39f1400e292b6ea476 /test
parent86be82f9877e29cb27de98c8680026df28e99af4 (diff)
ExecFork: Use close_range() if available
Use close_range() if we have it in preference to iterating over /proc/self/fd and falling back to closing all possible fds. This builds sets of ranges to close that take into account the APT::Keep-Fds vector, and a test case is provided to ensure correctness of the splitting logic. Preference is given to close_range() over /proc as in the optimal case, this results in a single system call!
Diffstat (limited to 'test')
-rwxr-xr-xtest/integration/test-close-range25
1 files changed, 25 insertions, 0 deletions
diff --git a/test/integration/test-close-range b/test/integration/test-close-range
new file mode 100755
index 000000000..977c4cf0a
--- /dev/null
+++ b/test/integration/test-close-range
@@ -0,0 +1,25 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+configarchitecture 'amd64'
+
+
+testsuccessequal "close_range(3, 4294967295)" apthelper drop-privs -o Debug::CloseRange=1 true
+
+
+testsuccessequal "close_range(4, 4294967295)" apthelper drop-privs -o APT::Keep-Fds::=3 -o Debug::CloseRange=1 true
+
+
+testsuccessequal "close_range(3, 4)
+close_range(6, 4294967295)" apthelper drop-privs -o APT::Keep-Fds::=5 -o Debug::CloseRange=1 true
+
+
+testsuccessequal "close_range(4, 4)
+close_range(6, 4294967295)" apthelper drop-privs -o APT::Keep-Fds::=3 -o APT::Keep-Fds::=5 -o Debug::CloseRange=1 true
+
+testsuccessequal "close_range(4, 4)
+close_range(7, 4294967295)" apthelper drop-privs -o APT::Keep-Fds::=3 -o APT::Keep-Fds::=5 -o APT::Keep-Fds::=6 -o Debug::CloseRange=1 true