pps_open is a boolean flag not a reference count; any close tears down the bus/interrupt for all openers
Summary
ppsopen uses single int flag sc->pps_open to decide whether ppbus acquired and interrupt registered. Second open by different process skips setup (pps.c:118) returns valid fd. When ANY holder calls close ppsclose unconditionally tears down interrupt (ppb_release_bus ppbconf.c:514-521) and sets pps_open=0 destroying PPS event delivery for all other open fds. ppsclose also ignores return value of ppb_release_bus (pps.c:153). Sequence: process A opens (bus acquired intr registered pps_open=1); process B opens (skips setup valid fd); process B closes ppb_release_bus tears down intr handler releases bus pps_open=0; process A still holds open fd but no PPS interrupts fire PPS_IOC_FETCH blocks until timeout. Subsequent open by C re-acquires bus registers new handler if A closes ppsclose tears down C interrupt cross-process interference. Attacker: local unprivileged opens /dev/ppsN immediately closes tears down ntpd PPS interrupt handler. DoS of kernel PPS timing subsystem. Narrow preconditions (parallel-port hardware + pps driver + victim using it).
Discussion (0)
PoC verification
Evidence pack
findings/poc/DF-2149 Β· 4 files| File | Type | Description | Size | |
|---|---|---|---|---|
| VERDICT.md | file | 696 B | β raw | |
| build.sh | file | 161 B | view raw | |
| fix.diff | file | 159 B | view raw | |
| run.sh | file | 80 B | view raw |
DF-2149 - Verification Verdict
Status: reproduced (source-confirmed) Impact: dos Confidence: likely
Verdict
Source-confirmed: ppsopen uses single int pps_open flag; second open skips setup; any close releases bus+intr for all holders; DoS; ppbus-gated
Fix Status
Validated: fix compiles in single batch kernel build rc=0 -Werror (0 compiler errors across all 86 fix.diffs)
Source File
Fix Validation
All 87 fix.diffs compiled together in a single batch kernel build
(make -j6 nativekernel KERNCONF=X86_64_GENERIC) with rc=0 and -Werror (0 compiler errors).
The combined patch is at findings/poc/batch_build/all_fixes.patch.
Fix verification
fixedbatch build rc=0
batch build rc=0
Confirmed kernel references
β
Detail
Exploit chain
none
Evidence (decisive lines)
ppsopen single int flag; ppbus-gated
Verified recommended fix
ppsopen single int flag; ppbus-gated
Verdict
ppsopen single int flag; ppbus-gated
No comments yet.