{
  "finding_id": "DF-4577",
  "status": "untested",
  "reproduced": 0,
  "impact": "none",
  "confidence": "certain",
  "verdict": "intel_hdcp_validate_v_prime (sys/dev/drm/i915/intel_hdcp.c:221-223) computes the KSV fill shift without offsetting for sha_leftovers, so from the second downstream KSV onward the new bytes OR-collide with the parked leftover byte and shift one slot high: the byte stream hashed by HDCP_SHA_TEXT diverges from the required KSV concatenation at stream byte 5. Proven mechanically by a guest-compiled simulation of both forms (findings/poc/DF-4577/run.log: N=2 DF row 1 2 3 4 7 7 8 0 vs required 1 2 3 4 5 6 7 8, where 7 = 5|6) and by diff against upstream, which fixed exactly this in the v5.17 HDCP rework ((sizeof(sha_text) - j - 1 - sha_leftovers) * 8). Impact is fail-closed: V can never match for repeaters reporting >=2 downstream devices, so HDCP1.4 repeater authentication always fails and content protection cannot be enabled on such topologies. No kernel memory-safety impact and no bypass (a wrong hash can only fail the V comparison, never pass it). Kernel-level reproduction is hardware-gated (Intel HSW/gen8+ display + HDCP repeater sink + DRM_MASTER fd in group video) and the QEMU audit guest has no i915-class GPU, so the kernel path is untested; the root cause and the fix are analytically certain.",
  "exploit_chain": "",
  "evidence": "findings/poc/DF-4577/run.log (decisive: first divergence at byte 5: got 7 want 5 for N>=2; upstream row exact), df4577_sim.c (faithful simulation of both loop forms), fix.diff (one-line upstream-aligned fix), VERDICT.md (full analysis + negative results)",
  "kernel_refs": [
    "sys/dev/drm/i915/intel_hdcp.c:221",
    "sys/dev/drm/i915/intel_hdcp.c:222",
    "sys/dev/drm/i915/intel_hdcp.c:223",
    "sys/dev/drm/i915/intel_hdcp.c:237",
    "sys/dev/drm/i915/intel_hdcp.c:389",
    "sys/dev/drm/i915/intel_hdcp.c:452"
  ],
  "poc_changes": "No seed PoC existed (pass-2 new finding); authored df4577_sim.c from scratch \u2014 a userspace arithmetic simulation of the exact fill/leftover loops of both the DF and upstream-fixed forms, compiled and run on the DragonFly audit guest.",
  "attempts": 1,
  "guest_uname": "DragonFly dfbsd 6.5-DEVELOPMENT DragonFly 6.5-DEVELOPMENT #0: Thu Jul  2 06:02:54 UTC 2026  root@dfbsd:/usr/obj/usr/src/sys/X86_64_GENERIC  x86_64",
  "runtime_sec": 20,
  "guest_dirty": 0,
  "build_cmd": "./build.sh (cc -O0 -g -o df4577_sim df4577_sim.c)",
  "run_cmd": "./run.sh (./df4577_sim)",
  "code_hash": "a3bd73834094baff6b20c141c91cacde14f963e0cd3ad61934345d7458a29f85",
  "notes": "Low severity, fail-closed, hardware-gated: kernel-level verification skipped per audit policy (guest has no i915-class GPU; DRM_IOCTL_MODE_OBJ_SETPROPERTY is DRM_MASTER-gated at sys/dev/drm/drm_ioctl.c:679 and /dev/dri/card* is root:video 0660 per etc/defaults/devfs.conf:7). Positive verification of the memory-safety surface of this file produced only negative results: KSV FIFO/bstatus buffers exactly sized in both shims (intel_hdmi.c:1048-1059, intel_dp.c:5482-5493), num_downstream 7-bit masked (drm_hdcp.h:22), atomic_check crtc_state NULL impossible (drm_atomic_get_connector_state allocates it), works cancelled before connector destruction (intel_display.c:16175-16177).",
  "recommended_fix": "Offset the fill shift by the parked leftovers, matching upstream v5.17+: sha_text |= ksv[j] << ((sizeof(sha_text) - j - 1 - sha_leftovers) * 8); (see fix.diff)",
  "fix_status": "not_testable",
  "fix_baseline_reproduced": 0,
  "fix_patched_reproduced": 0,
  "fix_verdict": "fix.diff is the exact upstream v5.17 correction; validated by the same arithmetic simulation (the fixed form emits the exact required byte stream for all N). A single-fix kernel build + on-hardware validation is impossible on this guest (no Intel gen8+ display hardware), hence not_testable.",
  "fix_evidence": "findings/poc/DF-4577/fix.diff (one-line change at sys/dev/drm/i915/intel_hdcp.c:223); run.log upstream rows show the corrected expression producing the exact concatenation 1..20 for N=5"
}