{"metadata": {"vulnerability": "CVE-2026-78118", "count": 10, "kinds": {"milestone": 3, "sighting": 1, "kev": 0, "other": 6}}, "data": [{"timestamp": "2026-08-22T20:23:01.098Z", "date_only": false, "value": "2026-08-22T20:23:01.098Z", "kind": "milestone", "label": "Reserved", "source": "cvelistv5", "record": "CVE-2026-78118", "field": "cveMetadata.dateReserved"}, {"timestamp": "2026-10-21T18:19:32.200Z", "date_only": false, "value": "2026-10-21T18:19:32.200Z", "kind": "milestone", "label": "Published", "source": "cvelistv5", "record": "CVE-2026-78118", "field": "cveMetadata.datePublished", "metric_role": "disclosure", "metric_basis": "recorded_event"}, {"timestamp": "2026-10-21T18:19:32.200Z", "date_only": false, "value": "2026-10-21T18:19:32.200Z", "kind": "other", "label": "Updated", "source": "cvelistv5 / zephyr", "record": "CVE-2026-78118", "field": "containers.cna.providerMetadata.dateUpdated"}, {"timestamp": "2026-10-21T19:17:03.787Z", "date_only": false, "value": "2026-10-21T19:17:03.787", "kind": "milestone", "label": "Published", "source": "fkie_nvd \u00b7 FKIE_CVE-2026-78118", "record": "FKIE_CVE-2026-78118", "field": "published", "metric_role": "disclosure", "metric_basis": "recorded_event"}, {"timestamp": "2026-10-21T20:07:09.464Z", "date_only": false, "value": "2026-10-21T20:07:09.464458Z", "kind": "sighting", "label": "Seen", "source": "https://infosec.exchange/users/cve/statuses/117480700522648396", "record": "CVE-2026-78118", "field": "creation_timestamp", "uuid": "1ea88b62-cb6a-454c-ac64-a4c311e7e803", "content": "CVE-2026-78118 Race condition on kernel wait queues: unlocked z_waitq_head() read in the timer expiration handler can yield a stale or sentinel thread pointer on SMP The kernel helper z_waitq_head() (kernel/include/wait_q.h) reads the head of a thread wait queue, but on SMP systems it was called from several places without holding the scheduler spinlock _sched_spinlock that serializes wait-queue mutation. The consequential call site is z_timer_expiration_handler() in kernel/timer.c, which held only the timer subsystem lock timer_lock while reading timer-&gt;wait_q and then unpending, setting the return value of, and readying the thread it obtained. halt_thread() in kernel/sched.c removes an aborted thread from its wait queue while holding only _sched_spinlock, so the two paths are not mutually exclusive.\nWhen the last waiter is removed on another CPU inside that window, sys_dlist_peek_head() can return the list sentinel \u2014 a pointer into the k_timer object itself \u2014 typed as a struct k_thread * (with CONFIG_WAITQ_SCALABLE, rb_get_min() can return an arbitrary node of a tree being restructured), or it can return a pointer to a thread that has already been unpended and, for dynamically allocated threads, freed. The handler then calls unpend_thread_no_timeout(), which performs a sys_dlist_remove() through pointers read from that object, and arch_thread_return_value_set(), which writes unconditionally through the pointer.\nThe result is out-of-bounds and use-after-free writes in supervisor context, plus scheduler state corruption; a milder outcome is a thread that has re-pended elsewhere being woken with a success return value from an unrelated blocking call. All of the primitives needed to drive the interleaving \u2014 k_timer_start(), k_timer_status_sync(), k_thread_create() and k_thread_abort() \u2014 are system calls, so with CONFIG_USERSPACE enabled an unprivileged user-mode thread can attempt the race against kernel-owned data.\nExploitation requires a multi-CPU build (CONFIG_MP_MAX_NUM_CPUS greater than one; the affected region is a no-op on uniprocessor targets), local code execution, and winning a narrow timing window, so the practical outcome is most often a kernel crash rather than controlled corruption. The fix splits the helper into z_waitq_head_locked() for callers that already hold the scheduler spinlock and a z_waitq_head() that acquires it, and brings the timer expiration handler's head read, unpend and ready under a single LOCK_SCHED_SPINLOCK region.\nhttps://www.cve.org/CVERecord?id=CVE-2026-78118https://github.com/zephyrproject-rtos/zephyr/commit/a9b21fb354e8468dd15db307c3e599dc68b7ef33https://github.com/zephyrproject-rtos/zephyr/security/advisories/GHSA-gm6w-pv43-m3vf#zephyrproject #zephyr#CVE_2026_78118#bot", "url": "https://infosec.exchange/users/cve/statuses/117480700522648396"}, {"timestamp": "2026-10-23T20:45:38.419Z", "date_only": false, "value": "2026-10-23T20:45:38.419990Z", "kind": "other", "label": "Recorded", "source": "cvelistv5 / CISA-ADP", "record": "CVE-2026-78118", "field": "containers.adp.0.metrics.0.other.content.timestamp"}, {"timestamp": "2026-10-23T20:45:38.419Z", "date_only": false, "value": "2026-10-23T20:45:38.419990Z", "kind": "other", "label": "Recorded", "source": "fkie_nvd \u00b7 FKIE_CVE-2026-78118", "record": "FKIE_CVE-2026-78118", "field": "metrics.ssvcV203.0.ssvcData.timestamp"}, {"timestamp": "2026-10-23T21:28:10.701Z", "date_only": false, "value": "2026-10-23T21:28:10.701Z", "kind": "other", "label": "Updated", "source": "cvelistv5", "record": "CVE-2026-78118", "field": "cveMetadata.dateUpdated"}, {"timestamp": "2026-10-23T21:28:10.701Z", "date_only": false, "value": "2026-10-23T21:28:10.701Z", "kind": "other", "label": "Updated", "source": "cvelistv5 / CISA-ADP", "record": "CVE-2026-78118", "field": "containers.adp.0.providerMetadata.dateUpdated"}, {"timestamp": "2026-10-23T22:17:00.450Z", "date_only": false, "value": "2026-10-23T22:17:00.450", "kind": "other", "label": "Updated", "source": "fkie_nvd \u00b7 FKIE_CVE-2026-78118", "record": "FKIE_CVE-2026-78118", "field": "lastModified"}], "metrics": {"as_of": "2026-10-31T22:05:48.692Z", "anchors": {"origin": {"timestamp": "2026-10-21T18:19:32.200Z", "date_only": false, "value": "2026-10-21T18:19:32.200Z", "kind": "milestone", "label": "Published", "source": "cvelistv5", "record": "CVE-2026-78118", "field": "cveMetadata.datePublished", "metric_role": "disclosure", "metric_basis": "recorded_event"}, "discovery": null, "report": null, "acknowledgement": null, "disclosure": {"timestamp": "2026-10-21T18:19:32.200Z", "date_only": false, "value": "2026-10-21T18:19:32.200Z", "kind": "milestone", "label": "Published", "source": "cvelistv5", "record": "CVE-2026-78118", "field": "cveMetadata.datePublished", "metric_role": "disclosure", "metric_basis": "recorded_event"}, "exploit_publication": null, "exploitation": null, "patch": null}, "vendor_response_time": {"available": false, "missing": ["start", "end"]}, "time_to_exploit": {"available": false, "missing": ["end"]}, "disclosure_to_exploit": {"available": false, "missing": ["end"]}, "disclosure_to_exploit_publication": {"available": false, "missing": ["end"]}, "time_to_patch": {"available": false, "missing": ["start", "end"]}, "total_time_to_patch": {"available": false, "missing": ["start", "end"]}, "disclosure_to_patch": {"available": false, "missing": ["end"]}, "time_unpatched": {"available": true, "seconds": 877576.492842, "hours": 243.77124801166667, "days": 10.157135333819443, "min_seconds": 877576.492842, "max_seconds": 877576.492842, "approximate": false, "ongoing": true, "order_known": true, "batch_listing": false, "end_before_start": false, "start": {"timestamp": "2026-10-21T18:19:32.200Z", "date_only": false, "value": "2026-10-21T18:19:32.200Z", "kind": "milestone", "label": "Published", "source": "cvelistv5", "record": "CVE-2026-78118", "field": "cveMetadata.datePublished", "metric_role": "disclosure", "metric_basis": "recorded_event"}, "end": {"timestamp": "2026-10-31T22:05:48.692Z", "date_only": false, "label": "As of", "source": "Calculation clock"}}, "exploitation_to_patch": {"available": false, "missing": ["start"]}, "exploit_publication_to_patch": {"available": false, "missing": ["start"]}}}
