CVE-2022-48898

drm/msm/dp: do not complete dp_aux_cmd_fifo_tx() if irq is not for aux transfer

published August 21, 2024

CVSS
—
EPSS
0%
Percentile
7.3
In the wild
Unconfirmed
What it is

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

drm/msm/dp: do not complete dp_aux_cmd_fifo_tx() if irq is not for aux transfer

There are 3 possible interrupt sources are handled by DP controller,

HPDstatus, Controller state changes and Aux read/write transaction.

At every irq, DP controller have to check isr status of every interrupt

sources and service the interrupt if its isr status bits shows interrupts

are pending. There is potential race condition may happen at current aux

isr handler implementation since it is always complete dp_aux_cmd_fifo_tx()

even irq is not for aux read or write transaction. This may cause aux read

transaction return premature if host aux data read is in the middle of

waiting for sink to complete transferring data to host while irq happen.

This will cause host's receiving buffer contains unexpected data. This

patch fixes this problem by checking aux isr and return immediately at

aux isr handler if there are no any isr status bits set.

Current there is a bug report regrading eDP edid corruption happen during

system booting up. After lengthy debugging to found that VIDEO_READY

interrupt was continuously firing during system booting up which cause

dp_aux_isr() to complete dp_aux_cmd_fifo_tx() prematurely to retrieve data

from aux hardware buffer which is not yet contains complete data transfer

from sink. This cause edid corruption.

Follows are the signature at kernel logs when problem happen,

EDID has corrupt header

panel-simple-dp-aux aux-aea0000.edp: Couldn't identify panel via EDID

Changes in v2:

-- do complete if (ret == IRQ_HANDLED) ay dp-aux_isr()

-- add more commit text

Changes in v3:

-- add Stephen suggested

-- dp_aux_isr() return IRQ_XXX back to caller

-- dp_ctrl_isr() return IRQ_XXX back to caller

Changes in v4:

-- split into two patches

Changes in v5:

-- delete empty line between tags

Changes in v6:

-- remove extra "that" and fixed line more than 75 char at commit text

Patchwork: https://patchwork.freedesktop.org/patch/516121/

The record
Technical detail
CVSS
Not scored
CVSS v4.0
Not supplied
EPSS
0.00181 · 7.3th percentile
Published
2024-08-21T06:10Z
EPSS history
Timeline
  • 21 AUG 06:10Z
    drm/msm/dp: do not complete dp_aux_cmd_fifo_tx() if irq is not for aux transfer
    cvelistv5