---
id: CVE-2026-98763
title: 'usb: core: clear both ep_in and ep_out for non-ep0 control endpoints'
summary: |-
  In the Linux kernel, the following vulnerability has been resolved:

  usb: core: clear both ep_in and ep_out for non-ep0 control endpoints

  In usb_enable_endpoint(), non-zero control endpoints (where
  usb_endpoint_xfer_control(&ep->desc) i…
severity: none
vendor: Linux
product: Linux
affected:
  - >-
    Linux >= 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 <
    7a9f61476b0e8002092a52ee8295edeeb0a28d1e
  - >-
    Linux >= 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 <
    1da16c46b8d7101b74bc2d72a04e23cf5c7ddea1
  - >-
    Linux >= 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 <
    c50413ecb662ea43c7f487632c8114721743a277
  - >-
    Linux >= 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 <
    0e8baa78d872f2db440d8b9ded946ab8dceb89eb
  - Linux 2.6.12
published: '2026-10-18'
updated: '2026-10-18'
sourceUpdated: '2026-10-18T15:47:54.526Z'
source: CVEORG
sourceUrl: 'https://www.cve.org/CVERecord?id=CVE-2026-98763'
references:
  - url: 'https://git.kernel.org/stable/c/7a9f61476b0e8002092a52ee8295edeeb0a28d1e'
  - url: 'https://git.kernel.org/stable/c/1da16c46b8d7101b74bc2d72a04e23cf5c7ddea1'
  - url: 'https://git.kernel.org/stable/c/c50413ecb662ea43c7f487632c8114721743a277'
  - url: 'https://git.kernel.org/stable/c/0e8baa78d872f2db440d8b9ded946ab8dceb89eb'
tags:
  - cve.org
ingestedAt: '2026-10-18T16:47:32.495Z'
---

## Overview

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

usb: core: clear both ep_in and ep_out for non-ep0 control endpoints

In usb_enable_endpoint(), non-zero control endpoints (where
usb_endpoint_xfer_control(&ep->desc) is true) populate both
dev->ep_in[epnum] and dev->ep_out[epnum] with the same struct
usb_host_endpoint pointer.

However, usb_disable_endpoint() only clears either dev->ep_out[epnum] or
dev->ep_in[epnum] depending on the direction bit of epaddr when
reset_hardware is set, leaving the opposite direction's array slot
pointing to the disabled/freed endpoint.

Clear both dev->ep_out[epnum] and dev->ep_in[epnum] when disabling a
non-ep0 control endpoint with reset_hardware set, and update the
function kerneldoc accordingly.

Tested in QEMU against Linux 7.3.0-rc3 using dummy_hcd and raw-gadget to
enumerate a USB device with a non-zero control endpoint
(bEndpointAddress 0x01, bmAttributes USB_ENDPOINT_XFER_CONTROL),
verifying that both dev->ep_in[1] and dev->ep_out[1] are cleared when
the interface is disabled.

## Affected

- `Linux >= 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 < 7a9f61476b0e8002092a52ee8295edeeb0a28d1e`
- `Linux >= 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 < 1da16c46b8d7101b74bc2d72a04e23cf5c7ddea1`
- `Linux >= 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 < c50413ecb662ea43c7f487632c8114721743a277`
- `Linux >= 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 < 0e8baa78d872f2db440d8b9ded946ab8dceb89eb`
- `Linux 2.6.12`

## Remediation

Refer to the linked advisories for vendor-supplied fixes and affected version ranges.
