---
id: CVE-2023-54220
title: 'serial: 8250: Fix oops for port->pm on uart_change_pm()'
summary: |-
  In the Linux kernel, the following vulnerability has been resolved:

  serial: 8250: Fix oops for port->pm on uart_change_pm()

  Unloading a hardware specific 8250 driver can produce error "Unable to
  handle kernel paging request at virtual …
severity: high
cvss: 7.8
cvssVector: 'CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H'
cvssSource: cna
vendor: Linux
product: Linux
affected:
  - >-
    Linux >= 490bf37eaabb0a857ed1ae8e75d8854e41662f1c <
    66f3e55960698c874b0598277913b478ecd29573
  - >-
    Linux >= c9e080c3005fd183c56ff8f4d75edb5da0765d2c <
    720a297b334e85d34099e83d1f375b92c3efedd6
  - >-
    Linux >= d5cd2928d31042a7c0a01464f9a8d95be736421d <
    b653289ca6460a6552c8590b75dfa84a0140a46b
  - >-
    Linux >= 2c86a1305c1406f45ea780d06953c484ea1d9e6e <
    bd70d0b28010d560a8be96b44fea86fe2ba016ae
  - >-
    Linux >= 1ba5594739d858e524ff0f398ee1ebfe0a8b9d41 <
    18e27df4f2b4e257c317ba8076f31a888f6cc64b
  - >-
    Linux >= af4d6dbb1a92ea424ad1ba1d0c88c7fa2345d872 <
    0c05493341d6f2097f75f0a5dbb7b53a9e8c5f6c
  - >-
    Linux >= 04e82793f068d2f0ffe62fcea03d007a8cdc16a7 <
    375806616f8c772c33d40e112530887b37c1a816
  - >-
    Linux >= 04e82793f068d2f0ffe62fcea03d007a8cdc16a7 <
    dfe2aeb226fd5e19b0ee795f4f6ed8bc494c1534
  - Linux 8e596aed5f2f98cf3e6e98d6fe1d689f4a319308
  - Linux >= 4.14.316 < 4.14.324
  - Linux >= 4.19.284 < 4.19.293
  - Linux >= 5.4.244 < 5.4.255
  - Linux >= 5.10.181 < 5.10.192
  - Linux >= 5.15.113 < 5.15.128
  - Linux >= 6.1.30 < 6.1.47
  - Linux >= 6.3.4 < 6.4
  - Linux 6.4
ssvc:
  exploitation: none
  automatable: 'no'
  technicalImpact: total
  timestamp: '2026-10-15T21:39:29.518449Z'
published: '2025-12-30'
updated: '2026-10-15'
sourceUpdated: '2026-10-15T21:41:42.172Z'
source: CVEORG
sourceUrl: 'https://www.cve.org/CVERecord?id=CVE-2023-54220'
references:
  - url: 'https://git.kernel.org/stable/c/66f3e55960698c874b0598277913b478ecd29573'
  - url: 'https://git.kernel.org/stable/c/720a297b334e85d34099e83d1f375b92c3efedd6'
  - url: 'https://git.kernel.org/stable/c/b653289ca6460a6552c8590b75dfa84a0140a46b'
  - url: 'https://git.kernel.org/stable/c/bd70d0b28010d560a8be96b44fea86fe2ba016ae'
  - url: 'https://git.kernel.org/stable/c/18e27df4f2b4e257c317ba8076f31a888f6cc64b'
  - url: 'https://git.kernel.org/stable/c/0c05493341d6f2097f75f0a5dbb7b53a9e8c5f6c'
  - url: 'https://git.kernel.org/stable/c/375806616f8c772c33d40e112530887b37c1a816'
  - url: 'https://git.kernel.org/stable/c/dfe2aeb226fd5e19b0ee795f4f6ed8bc494c1534'
tags:
  - cve.org
epss: 0.00155
epssPercentile: 0.04161
ingestedAt: '2026-10-15T22:48:25.434Z'
---

## Overview

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

serial: 8250: Fix oops for port->pm on uart_change_pm()

Unloading a hardware specific 8250 driver can produce error "Unable to
handle kernel paging request at virtual address" about ten seconds after
unloading the driver. This happens on uart_hangup() calling
uart_change_pm().

Turns out commit 04e82793f068 ("serial: 8250: Reinit port->pm on port
specific driver unbind") was only a partial fix. If the hardware specific
driver has initialized port->pm function, we need to clear port->pm too.
Just reinitializing port->ops does not do this. Otherwise serial8250_pm()
will call port->pm() instead of serial8250_do_pm().

## Affected

- `Linux >= 490bf37eaabb0a857ed1ae8e75d8854e41662f1c < 66f3e55960698c874b0598277913b478ecd29573`
- `Linux >= c9e080c3005fd183c56ff8f4d75edb5da0765d2c < 720a297b334e85d34099e83d1f375b92c3efedd6`
- `Linux >= d5cd2928d31042a7c0a01464f9a8d95be736421d < b653289ca6460a6552c8590b75dfa84a0140a46b`
- `Linux >= 2c86a1305c1406f45ea780d06953c484ea1d9e6e < bd70d0b28010d560a8be96b44fea86fe2ba016ae`
- `Linux >= 1ba5594739d858e524ff0f398ee1ebfe0a8b9d41 < 18e27df4f2b4e257c317ba8076f31a888f6cc64b`
- `Linux >= af4d6dbb1a92ea424ad1ba1d0c88c7fa2345d872 < 0c05493341d6f2097f75f0a5dbb7b53a9e8c5f6c`
- `Linux >= 04e82793f068d2f0ffe62fcea03d007a8cdc16a7 < 375806616f8c772c33d40e112530887b37c1a816`
- `Linux >= 04e82793f068d2f0ffe62fcea03d007a8cdc16a7 < dfe2aeb226fd5e19b0ee795f4f6ed8bc494c1534`
- `Linux 8e596aed5f2f98cf3e6e98d6fe1d689f4a319308`
- `Linux >= 4.14.316 < 4.14.324`
- `Linux >= 4.19.284 < 4.19.293`
- `Linux >= 5.4.244 < 5.4.255`
- `Linux >= 5.10.181 < 5.10.192`
- `Linux >= 5.15.113 < 5.15.128`
- `Linux >= 6.1.30 < 6.1.47`
- `Linux >= 6.3.4 < 6.4`
- `Linux 6.4`

## Remediation

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