{"dataType":"CVE_RECORD","dataVersion":"5.2","cveMetadata":{"cveId":"CVE-2025-68167","assignerOrgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","state":"PUBLISHED","assignerShortName":"Linux","dateReserved":"2025-12-16T13:41:40.250Z","datePublished":"2025-12-16T13:42:47.480Z","dateUpdated":"2026-08-05T12:09:56.647Z"},"containers":{"cna":{"providerMetadata":{"orgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","shortName":"Linux","dateUpdated":"2026-08-05T12:09:56.647Z"},"descriptions":[{"lang":"en","value":"In the Linux kernel, the following vulnerability has been resolved:\n\ngpiolib: fix invalid pointer access in debugfs\n\nIf the memory allocation in gpiolib_seq_start() fails, the s->private\nfield remains uninitialized and is later dereferenced without checking\nin gpiolib_seq_stop(). Initialize s->private to NULL before calling\nkzalloc() and check it before dereferencing it."}],"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 vulnerability is reached only by reading the local debugfs file /sys/kernel/debug/gpio; there is no network or remote path into gpiolib's seq_file handlers.\nAC:L - The attacker fully controls both required conditions — memory pressure to make the small GFP_KERNEL kzalloc fail, and unbounded repetition of read()/lseek() on the file, each of which drives multiple start/stop cycles — so the failure can simply be retried until it lands.\nPR:L - The gpio debugfs file is explicitly created world-readable (mode 0444) and needs no capability, so any unprivileged local user reaches it on the many embedded, automotive, industrial and Android deployments that mount debugfs traversable (mode=755 or uid/gid options), which is common precisely because GPIO debugging is the reason debugfs is mounted there.\nUI:N - The attacker triggers the bug entirely through their own read() calls on the debugfs file; no action by any other user or victim process is needed.\nS:U - The corruption stays within the kernel's own security authority — freed slab memory and per-CPU SRCU counters — with no crossing of a VM, IOMMU or sandbox boundary.\nC:H - gpiolib_seq_stop() reads priv->idx out of an already-freed kmalloc-16 object, and the accompanying double free corrupts the slab freelist, enabling overlapping allocations that yield arbitrary kernel memory disclosure.\nI:H - The stale idx is fed unvalidated into __srcu_read_unlock(), producing this_cpu_inc() at an attacker-influenced out-of-bounds offset from the per-CPU srcu_data, and the subsequent kfree() of an object owned by another allocation is a classic double-free write primitive.\nA:H - On the first iteration s->private is NULL, so gpiolib_seq_stop() dereferences NULL and oopses; on later iterations the use-after-free, wild per-CPU increment and double free reliably panic the kernel."}]}],"affected":[{"product":"Linux","vendor":"Linux","defaultStatus":"unaffected","repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["drivers/gpio/gpiolib.c"],"versions":[{"version":"e348544f7994d252427ed3ae637c7081cbb90f66","lessThan":"70180a6031056096c93ed2f47c41803268bdd91c","status":"affected","versionType":"git"},{"version":"e348544f7994d252427ed3ae637c7081cbb90f66","lessThan":"3c91c8f424d3e44c8645ab765a38773e58afb07d","status":"affected","versionType":"git"},{"version":"e348544f7994d252427ed3ae637c7081cbb90f66","lessThan":"2f6115ad8864cf3f48598f26c74c7c8e5c391919","status":"affected","versionType":"git"}]},{"product":"Linux","vendor":"Linux","defaultStatus":"affected","repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["drivers/gpio/gpiolib.c"],"versions":[{"version":"6.9","status":"affected"},{"version":"0","lessThan":"6.9","status":"unaffected","versionType":"semver"},{"version":"6.12.58","lessThanOrEqual":"6.12.*","status":"unaffected","versionType":"semver"},{"version":"6.17.8","lessThanOrEqual":"6.17.*","status":"unaffected","versionType":"semver"},{"version":"6.18","lessThanOrEqual":"*","status":"unaffected","versionType":"original_commit_for_fix"}]}],"cpeApplicability":[{"nodes":[{"operator":"OR","negate":false,"cpeMatch":[{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"6.9","versionEndExcluding":"6.12.58"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"6.9","versionEndExcluding":"6.17.8"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"6.9","versionEndExcluding":"6.18"}]}]}],"references":[{"url":"https://git.kernel.org/stable/c/70180a6031056096c93ed2f47c41803268bdd91c"},{"url":"https://git.kernel.org/stable/c/3c91c8f424d3e44c8645ab765a38773e58afb07d"},{"url":"https://git.kernel.org/stable/c/2f6115ad8864cf3f48598f26c74c7c8e5c391919"}],"title":"gpiolib: fix invalid pointer access in debugfs","x_generator":{"engine":"bippy-1.2.0"}}}}