{"id":"CVE-2026-68462","state":"PUBLISHED","title":"bpf: Reject negative const offsets for buffer pointers","description":"In the Linux kernel, the following vulnerability has been resolved:\n\nbpf: Reject negative const offsets for buffer pointers\n\nThe verifier rejects variable offsets for PTR_TO_TP_BUFFER and PTR_TO_BUF\naccesses, but it currently accepts a constant negative offset produced by\npointer arithmetic.\n\nCommit 022ac0750883 (\"bpf: use reg->var_off instead of reg->off for\npointers\") moved constant pointer offsets from reg->off to reg->var_off.\nHowever, __check_buffer_access() continued to check only the instruction\noffset. An access with reg->var_off equal to -8 and an instruction offset\nof zero therefore passes verification.\n\nFor writable raw tracepoints, the access end is also calculated from the\nunsigned reg->var_off.value. An eight-byte access starting at -8 wraps\nthe calculated end to zero, allowing the program to load and attach\nwithout increasing max_tp_access.\n\nAfter ensuring that reg->var_off is constant, calculate the effective\naccess start using signed arithmetic and reject it when it is negative.\nUse the validated start to calculate the access end for both\nPTR_TO_TP_BUFFER and PTR_TO_BUF.","publishedAt":"2026-08-15T05:51:21.948Z","updatedAt":"2026-08-17T05:39:09.532Z","severity":{"score":7.8,"label":"High","version":"3.1","vector":"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H","source":"Linux"},"assigner":"Linux","products":["Linux Linux"],"affected":[{"vendor":"Linux","product":"Linux","defaultStatus":"unaffected","versions":[{"version":"022ac075088366b62e130da5e1b200bc93a47191","status":"affected","lessThan":"314bd592085c0720ef519f6edbc5f41440ff78d4","versionType":"git"},{"version":"022ac075088366b62e130da5e1b200bc93a47191","status":"affected","lessThan":"fd4cfa8c8f9a17cdec0539334d28754bc1d8a5d9","versionType":"git"}],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["kernel/bpf/verifier.c"]},{"vendor":"Linux","product":"Linux","defaultStatus":"affected","versions":[{"version":"7.1","status":"affected"},{"version":"0","status":"unaffected","lessThan":"7.1","versionType":"semver"},{"version":"7.1.5","status":"unaffected","lessThanOrEqual":"7.1.*","versionType":"semver"},{"version":"7.2","status":"unaffected","lessThanOrEqual":"*","versionType":"original_commit_for_fix"}],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["kernel/bpf/verifier.c"]}],"references":["https://git.kernel.org/stable/c/314bd592085c0720ef519f6edbc5f41440ff78d4","https://git.kernel.org/stable/c/fd4cfa8c8f9a17cdec0539334d28754bc1d8a5d9"],"weaknesses":[],"ingestedAt":"2026-10-29T20:12:49.727Z","source":{"repository":"CVEProject/cvelistV5","path":"cves/2026/68xxx/CVE-2026-68462.json","commit":"556c9d3a8cd17e218bb8e452ba7cd619a384ff47"},"raw":{"dataType":"CVE_RECORD","dataVersion":"5.2","cveMetadata":{"cveId":"CVE-2026-68462","state":"PUBLISHED","datePublished":"2026-08-15T05:51:21.948Z","dateUpdated":"2026-08-17T05:39:09.532Z","assignerShortName":"Linux","assignerOrgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","dateReserved":"2026-07-30T09:28:09.395Z"},"containers":{"cna":{"title":"bpf: Reject negative const offsets for buffer pointers","descriptions":[{"lang":"en","value":"In the Linux kernel, the following vulnerability has been resolved:\n\nbpf: Reject negative const offsets for buffer pointers\n\nThe verifier rejects variable offsets for PTR_TO_TP_BUFFER and PTR_TO_BUF\naccesses, but it currently accepts a constant negative offset produced by\npointer arithmetic.\n\nCommit 022ac0750883 (\"bpf: use reg->var_off instead of reg->off for\npointers\") moved constant pointer offsets from reg->off to reg->var_off.\nHowever, __check_buffer_access() continued to check only the instruction\noffset. An access with reg->var_off equal to -8 and an instruction offset\nof zero therefore passes verification.\n\nFor writable raw tracepoints, the access end is also calculated from the\nunsigned reg->var_off.value. An eight-byte access starting at -8 wraps\nthe calculated end to zero, allowing the program to load and attach\nwithout increasing max_tp_access.\n\nAfter ensuring that reg->var_off is constant, calculate the effective\naccess start using signed arithmetic and reject it when it is negative.\nUse the validated start to calculate the access end for both\nPTR_TO_TP_BUFFER and PTR_TO_BUF."}],"affected":[{"vendor":"Linux","product":"Linux","defaultStatus":"unaffected","versions":[{"version":"022ac075088366b62e130da5e1b200bc93a47191","status":"affected","lessThan":"314bd592085c0720ef519f6edbc5f41440ff78d4","versionType":"git"},{"version":"022ac075088366b62e130da5e1b200bc93a47191","status":"affected","lessThan":"fd4cfa8c8f9a17cdec0539334d28754bc1d8a5d9","versionType":"git"}],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["kernel/bpf/verifier.c"]},{"vendor":"Linux","product":"Linux","defaultStatus":"affected","versions":[{"version":"7.1","status":"affected"},{"version":"0","status":"unaffected","lessThan":"7.1","versionType":"semver"},{"version":"7.1.5","status":"unaffected","lessThanOrEqual":"7.1.*","versionType":"semver"},{"version":"7.2","status":"unaffected","lessThanOrEqual":"*","versionType":"original_commit_for_fix"}],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["kernel/bpf/verifier.c"]}],"references":[{"url":"https://git.kernel.org/stable/c/314bd592085c0720ef519f6edbc5f41440ff78d4"},{"url":"https://git.kernel.org/stable/c/fd4cfa8c8f9a17cdec0539334d28754bc1d8a5d9"}],"metrics":[{"cvssV3_1":{"version":"3.1","vectorString":"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H","baseScore":7.8,"baseSeverity":"HIGH"},"scenarios":[{"lang":"en","value":"AV:L - The bug is in bpf_check() during bpf(BPF_PROG_LOAD); the path is bpf_prog_load() → bpf_check() → check_mem_access() → __check_buffer_access() on PTR_TO_TP_BUFFER/PTR_TO_BUF. Per kernel CNA guidance BPF verifier bugs are Local, not network-reachable.\nAC:L - Exploitation is deterministic: pointer arithmetic (e.g. r6 += -8) yields a constant negative reg->var_off that passes the insn-only check, and unsigned wrap sets max_tp_access/max_rdwr_access to zero. The attacker fully controls program bytecode and triggering with no race or layout dependency.\nPR:L - Affected BPF_PROG_TYPE_RAW_TRACEPOINT_WRITABLE and BPF_PROG_TYPE_TRACING/BPF_TRACE_ITER programs require CAP_BPF and CAP_PERFMON checked by bpf_token_capable(); BPF tokens delegate these capabilities into a non-init user namespace, so a namespace-local actor can reach bpf_prog_load without init-namespace root.\nUI:N - No victim interaction is required; after loading and attaching the malicious program the attacker triggers execution by reading a BPF iterator fd or causing a writable raw tracepoint to fire, entirely through their own syscalls.\nS:U - The verifier bypass permits out-of-bounds kernel reads/writes adjacent to tracepoint or iterator buffers within the same host kernel security authority; impact is standard kernel memory corruption and privilege escalation, not a VM, container, or IOMMU boundary crossing.\nC:H - Verified loads at negative offsets read up to eight bytes before PTR_TO_TP_BUFFER or PTR_TO_BUF targets, disclosing adjacent kernel stack or kmalloc memory (map keys/values, tracepoint writable buffers); per guidance out-of-bounds kernel reads warrant High confidentiality impact.\nI:H - Writable raw tracepoint programs can store at negative offsets while max_tp_access wraps to zero, and PTR_TO_BUF iterator contexts allow verified writes before map value buffers; these out-of-bounds stores corrupt adjacent kernel memory with a plausible control-flow hijack primitive.\nA:H - Out-of-bounds kernel memory accesses from attached BPF programs commonly provoke kernel oops or panic; the attacker can repeatedly trigger iterator reads or writable raw tracepoints to deny host availability."}]}],"providerMetadata":{"shortName":"Linux","orgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","dateUpdated":"2026-08-17T05:39:09.532Z"},"cpeApplicability":[{"nodes":[{"operator":"OR","negate":false,"cpeMatch":[{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"7.1","versionEndExcluding":"7.1.5"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"7.1","versionEndExcluding":"7.2"}]}]}],"x_generator":{"engine":"bippy-1.2.0"}}}}}