Harden network helpers and compat-dir mounts per security review

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-10-24 00:45:27 +02:00
co-authored by Claude Sonnet 5
parent 4c4bb1a83a
commit 598a585eb8
53 changed files with 1151 additions and 80 deletions
+3 -3
View File
@@ -12,10 +12,10 @@ fail() { echo "docs: $*"; bad=$((bad+1)); }
while IFS= read -r f; do
f=${f#./}
printf '%s\n' "${DOCS[@]}" | grep -qxF "$f" || fail "$f is not in the DOCS list of scripts/check-docs.sh"
done < <(find . -name '*.md' -not -path './build/*' -not -path './.git/*' -not -path './prompt.md' -not -path './audit/*' -not -path './review.md')
done < <(find . -name '*.md' -not -path './build/*' -not -path './.git/*' -not -path './prompt.md' -not -path './audit/*' -not -path './review.md' -not -path './valgrind/*')
# prompt.md: the original task statement, not documentation.
# audit/*: a separate, self-contained doc set (one README per CVE check); audit/README.md is
# linked from the main docs but is not forced into their full cross-link mesh.
# audit/*, valgrind/*: separate, self-contained doc sets (one README per CVE check, one for the
# valgrind setup); linked from the main docs but not forced into their full cross-link mesh.
# review.md: a standalone external security review, not part of the maintained doc set.
for f in "${DOCS[@]}"; do
+64
View File
@@ -0,0 +1,64 @@
#!/usr/bin/env bash
# Runs a fixed, named set of doos invocations under valgrind's memcheck, using
# valgrind/doos.supp to silence the known, explained allocation sites (see that file's
# comments), and fails only on a real, unsuppressed memory error or leak. Does not rebuild;
# run `make build` (or just `make valgrind`, which depends on it) first.
#
# Usage: scripts/valgrind.sh [path/to/doos]
set -u
cd "$(dirname "$0")/.."
DOOS="${1:-build/doos}"
SUPP="$(pwd)/valgrind/doos.supp"
REPORTS="build/valgrind-reports"
TIMEOUT=60
command -v valgrind >/dev/null || { echo "valgrind: not installed"; exit 1; }
[ -x "$DOOS" ] || { echo "valgrind: no doos binary at '$DOOS' (run 'make build' first)"; exit 1; }
[ -f "$SUPP" ] || { echo "valgrind: suppressions file missing: $SUPP"; exit 1; }
rm -rf "$REPORTS"
mkdir -p "$REPORTS"
TMP=$(mktemp -d)
trap 'rm -rf "$TMP"' EXIT
export DOOS_HOME="$TMP/home"
fails=0
checked=0
run() { # run NAME -- DOOS_ARGS...
local name="$1"; shift
shift # drop the --
checked=$((checked + 1))
local log="$REPORTS/$name.log"
timeout "$TIMEOUT" valgrind \
--leak-check=full --show-leak-kinds=all --track-origins=yes \
--suppressions="$SUPP" --error-exitcode=99 \
--log-file="$log" \
"$DOOS" "$@" >/dev/null 2>&1
local rc=$?
if [ "$rc" = 99 ]; then
echo "FAIL $name: valgrind reported an unsuppressed error or leak, see $log"
fails=$((fails + 1))
elif [ "$rc" = 124 ]; then
echo "FAIL $name: timed out after ${TIMEOUT}s under valgrind, see $log"
fails=$((fails + 1))
else
echo "ok $name (doos exit=$rc; valgrind found nothing to report), see $log"
fi
}
# Fixed, named set: the four CLI commands SPEC.md documents, plus a second attach to exercise
# the join-a-running-container path. No image download here (network + extraction add their
# own long-running C library code, better covered once by a dedicated image-mode run; see
# valgrind/README.md for how to add one).
run list -- list
run get_or_create -- get_or_create --net none vgcheck
run attach_first -- attach --net none vgcheck -- true
run attach_join -- attach --net none vgcheck -- true
run image_list -- image list
run delete -- delete --yes vgcheck
echo "valgrind: $checked checked, $fails failed, reports in $REPORTS/"
[ "$fails" -eq 0 ]