rdmbair15m5-changelog-20260911-0504-m3-iter2-processtreereaper-syslog-hardening
rdmbair15m5-changelog-20260911-0504-m3-iter2-processtreereaper-syslog-hardening
Remediated Milestone M3 Iteration 2 defects (DEFECT-M3-01 ProcessTreeReaper safety invariants against self/session termination, and SyslogOctetStreamDecoder unbounded allocation defense with transport connection teardown) across ECSSystem, ECSLog, and ecs0lib.
Summary of Changes
ProcessTreeReaper Safety Invariants (DEFECT-M3-01):
- Replaced vulnerable branching with hard invariant entry guard:
guard pid > 1 && pid != currentPID && pid != parentPGRP else { return }. - Added safe
canSignalGroupcondition:(childPGID > 1 && childPGID != parentPGRP && childPGID != currentPID). - Added defensive individual signal checks in Phase 1 soft
termination: guarded
pidand all discovered descendants (where d > 1 && d != currentPID && d != parentPGRP). - Added defensive identity checks in Phase 4 force termination:
guarded
target > 1 && target != currentPID && target != parentPGRP. - Hardened
discoverDescendantPIDsto rejectrootPID == currentPID || rootPID == parentPGRPand avoid visiting caller PID or session group leader. - Symmetrically synchronized between
ECSSystemandecs0lib(diff -u0 lines).
- Replaced vulnerable branching with hard invariant entry guard:
SyslogOctetStreamDecoder & Transport Defenses:
- Implemented
maxFrameLength: Int = 65_536inSyslogOctetStreamDecoderper RFC 5424 § 6.1 and RFC 5425 § 4.3.1. - Advancing past space delimiter
(
buffer.removeSubrange(buffer.startIndex..<nextIndex)) whenmsgLen > maxFrameLength, preventing phantom empty frame emission and payload truncation. - Implemented un-delimited byte discard when
buffer.count > maxFrameLength && buffer.firstIndex(of: 0x20) == nil. - Added header distance validation (> 19 digits) to prevent CPU starvation.
- Added
do { ... } catch { self.connection?.cancel(); self.connection = nil; throw error }acrossSyslogUDPTransport,SyslogTCPTransport, andSyslogTLSTransportto prevent socket resource leaks and allow automatic reconnect. - In
SyslogUnixSocketTransport, setSO_NOSIGPIPE, configuredaddr.sun_len = UInt8(MemoryLayout<sockaddr_un>.size), and resetlastFailureTimestamp = nilupon successful transmission. - Verified 100% bit-for-bit symmetry across
ECSSystem,ECSLog, andecs0lib(SyslogTransports.swift).
- Implemented
Safety & Adversarial Unit Test Suites:
- Added
testProcessTreeReaperRejectsCallerPID(),testProcessTreeReaperRejectsParentPGRP(),testProcessTreeReaperRejectsNegativePID(), andtestProcessTreeReaperRejectsSystemPID1()toECSSystemandecs0lib. - Added
testSyslogOctetStreamDecoderRejectsOversizedFrameLength(),testOctetStreamDecoderOversizedFrameDiscardAndRecovery(),testOctetStreamDecoderUnboundedStreamDiscard(), andtestOctetStreamDecoderBoundarySizeEnforcement()toECSSystem,ECSLog, andecs0lib.
- Added
Scope & Repositories Touched
- Target Hosts:
rdmsm4x(canonical dev root~/dev/lib/),rdmbair15m5(local test runner) - Repositories & Commits:
rdmsm4x:~/dev/lib/ECSSystem: commit0ed96d4rdmsm4x:~/dev/lib/ECSLog: commitece83d9rdmsm4x:~/dev/lib/ecs0lib: commite9f9bb6- Pushed to remotes:
git.ecs0.net:git/lib/ECSSystem.git,git.ecs0.net:git/lib/ECSLog.git,git.ecs0.net:git/lib/ecs0lib.git, and GitHub backups.
Verification Evidence
ssh rdmsm4x 'swift test --package-path ~/dev/lib/ECSSystem': 36/36 tests passed (0 failures)ssh rdmsm4x 'swift test --package-path ~/dev/lib/ECSLog': 15/15 tests passed (0 failures)ssh rdmsm4x 'swift test --package-path ~/dev/lib/ecs0lib --filter M3': 23/23 tests passed (0 failures)ssh rdmsm4x 'swift test --package-path ~/dev/lib/ecs0lib --filter SyslogTests': 14/14 tests passed (0 failures)ssh rdmsm4x '~/dev/scratch/m3_challenger_stress_harness': 65/65 passed (100.00%)ssh rdmsm4x 'swift build --package-path ~/dev/lib/ecs0lib -c release --arch arm64 --arch x86_64': Universal binary release build succeeded (arm64+x86_64verified withlipo)./Users/richh/teamwork_projects/ecslibrary_expansion/tests/e2e/run_e2e_tests.zsh: 392/392 passed (100.00%).
Rollback & Undo
- Git commits can be reverted using
git revert 0ed96d4(ECSSystem),git revert ece83d9(ECSLog),git revert e9f9bb6(ecs0lib).