CVE-2026-90310: xen/xenbus: check otherend_id only after it has been initialized

Published Sep 17, 2026
·
Updated

In the Linux kernel, the following vulnerability has been resolved:

xen/xenbus: check otherendid only after it has been initialized

When device just got initialized (for example on module load), the otherendid field is initialized only after xenbusreadotherenddetails() gets called. If xenstore watch triggers xenbusdevchanged() before that, it might consider still zeroed otherendid field (not matching actual xenstore content) as a sign of device state reset. It can happen because xenstore watch are handled in another thread (xenwatch), which can run in parallel to the initial device probe running at module load. In that case, it would call deviceunregister(), which would deadlock against device probe from module init.

Fix this by considering dev->otherendid change only after dev->otherend is set (which happen after otherendid is initialized).

Affected Software

1 affected component
The Linux Kernel Community Linux Kernel

Remediation

Recommended actions to resolve this vulnerability, in priority order.

  1. Configuration

    In xen/xenbus, modify the logic so otherend_id is checked only after it has been initialized (i.e., ensure xenbus_dev_changed() does not evaluate otherend_id before xenbus_read_otherend_details() initializes it).

    xen/xenbus check otherend_id only after it has been initialized = defer otherend_id checks until after xenbus_read_otherend_details() has been called and otherend_id is initialized

Event History

Sep 17, 2026
CVE Published
via MITRE·04:08 PM
Rejected
via MITRE·04:08 PM
Sep 18, 2026
Rejected
via MITRE·11:12 AM

Frequently Asked Questions

1

What condition triggers the deadlock?

A Xenstore watch must invoke xenbus_dev_changed() while a device is still being initially probed, before xenbus_read_otherend_details() has initialized otherend_id. This race can occur because the xenwatch thread runs in parallel with the device probe, including during module load.

2

What is the practical impact of the race?

The uninitialized, zeroed otherend_id can be treated as a device-state reset when it does not match Xenstore content. xenbus_dev_changed() can then call device_unregister(), which deadlocks against the ongoing device probe from module initialization.

3

How does the resolved change prevent the issue?

The change considers otherend_id changes only after dev->otherend has been set. dev->otherend is set after otherend_id has been initialized, preventing the early Xenstore watch from acting on the zeroed field.

Contact

SecAlerts Pty Ltd.
132 Wickham Terrace
Fortitude Valley,
QLD 4006, Australia
info@secalerts.co
By using SecAlerts services, you agree to our services end-user license agreement. This website is safeguarded by reCAPTCHA and governed by the Google Privacy Policy and Terms of Service. All names, logos, and brands of products are owned by their respective owners, and any usage of these names, logos, and brands for identification purposes only does not imply endorsement. If you possess any content that requires removal, please get in touch with us.
© 2026 SecAlerts Pty Ltd.
ABN: 70 645 966 203, ACN: 645 966 203