CVE-2022-49214

EUVD-2022-55012
In the Linux kernel, the following vulnerability has been resolved:

powerpc/64s: Don't use DSISR for SLB faults

Since commit 46ddcb3950a2 ("powerpc/mm: Show if a bad page fault on data
is read or write.") we use page_fault_is_write(regs->dsisr) in
__bad_page_fault() to determine if the fault is for a read or write, and
change the message printed accordingly.

But SLB faults, aka Data Segment Interrupts, don't set DSISR (Data
Storage Interrupt Status Register) to a useful value. All ISA versions
from v2.03 through v3.1 specify that the Data Segment Interrupt sets
DSISR "to an undefined value". As far as I can see there's no mention of
SLB faults setting DSISR in any BookIV content either.

This manifests as accesses that should be a read being incorrectly
reported as writes, for example, using the xmon "dump" command:

  0:mon> d 0x5deadbeef0000000
  5deadbeef0000000
  [359526.415354][    C6] BUG: Unable to handle kernel data access on write at 0x5deadbeef0000000
  [359526.415611][    C6] Faulting instruction address: 0xc00000000010a300
  cpu 0x6: Vector: 380 (Data SLB Access) at [c00000000ffbf400]
      pc: c00000000010a300: mread+0x90/0x190

If we disassemble the PC, we see a load instruction:

  0:mon> di c00000000010a300
  c00000000010a300 89490000      lbz     r10,0(r9)

We can also see in exceptions-64s.S that the data_access_slb block
doesn't set IDSISR=1, which means it doesn't load DSISR into pt_regs. So
the value we're using to determine if the fault is a read/write is some
stale value in pt_regs from a previous page fault.

Rework the printing logic to separate the SLB fault case out, and only
print read/write in the cases where we can determine it.

The result looks like eg:

  0:mon> d 0x5deadbeef0000000
  5deadbeef0000000
  [  721.779525][    C6] BUG: Unable to handle kernel data access at 0x5deadbeef0000000
  [  721.779697][    C6] Faulting instruction address: 0xc00000000014cbe0
  cpu 0x6: Vector: 380 (Data SLB Access) at [c00000000ffbf390]

  0:mon> d 0
  0000000000000000
  [  742.793242][    C6] BUG: Kernel NULL pointer dereference at 0x00000000
  [  742.793316][    C6] Faulting instruction address: 0xc00000000014cbe0
  cpu 0x6: Vector: 380 (Data SLB Access) at [c00000000ffbf390]
ProviderTypeBase ScoreAtk. VectorAtk. ComplexityPriv. RequiredVector
NISTPrimary
5.5 MEDIUM
LOCAL
LOW
LOW
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H
Base Score
CVSS 3.x
EPSS Score
Percentile: 6%
Affected Products (NVD)
VendorProductVersion
linuxlinux_kernel
5.5 ≤
𝑥
< 5.15.33
linuxlinux_kernel
5.16 ≤
𝑥
< 5.16.19
linuxlinux_kernel
5.17 ≤
𝑥
< 5.17.2
𝑥
= Vulnerable software versions
Debian logo
Debian Releases
Debian Product
Codename
linux
bookworm
6.1.123-1
fixed
bookworm (security)
6.1.128-1
fixed
bullseye
vulnerable
bullseye (security)
vulnerable
sid
6.12.16-1
fixed
trixie
6.12.12-1
fixed
openSUSE logo
openSUSE / SLES Releases
openSUSE Product
Release
cluster-md-kmp-default
suse enterprise server 15 SP5
5.14.21-150500.55.100.1
fixed
dlm-kmp-default
suse enterprise server 15 SP5
5.14.21-150500.55.100.1
fixed
gfs2-kmp-default
suse enterprise server 15 SP5
5.14.21-150500.55.100.1
fixed
kernel-64kb
suse enterprise server 15 SP4
5.14.21-150400.24.158.1
fixed
suse enterprise server 15 SP5
5.14.21-150500.55.100.1
fixed
kernel-default
suse enterprise server 15 SP4
5.14.21-150400.24.158.1
fixed
suse enterprise server 15 SP5
5.14.21-150500.55.100.1
fixed
kernel-default-base
suse enterprise server 15 SP4
5.14.21-150400.24.158.1.150400.24.78.1
fixed
suse enterprise server 15 SP5
5.14.21-150500.55.100.1.150500.6.47.1
fixed
kernel-docs
suse enterprise server 15 SP4
5.14.21-150400.24.158.1
fixed
suse enterprise server 15 SP5
5.14.21-150500.55.100.1
fixed
kernel-macros
suse enterprise server 15 SP4
5.14.21-150400.24.158.1
fixed
suse enterprise server 15 SP5
5.14.21-150500.55.100.1
fixed
kernel-obs-build
suse enterprise server 15 SP4
5.14.21-150400.24.158.1
fixed
suse enterprise server 15 SP5
5.14.21-150500.55.100.1
fixed
kernel-source
suse enterprise server 15 SP4
5.14.21-150400.24.158.1
fixed
suse enterprise server 15 SP5
5.14.21-150500.55.100.1
fixed
kernel-syms
suse enterprise server 15 SP4
5.14.21-150400.24.158.1
fixed
suse enterprise server 15 SP5
5.14.21-150500.55.100.1
fixed
kernel-zfcpdump
suse enterprise server 15 SP4
5.14.21-150400.24.158.1
fixed
suse enterprise server 15 SP5
5.14.21-150500.55.100.1
fixed
ocfs2-kmp-default
suse enterprise server 15 SP5
5.14.21-150500.55.100.1
fixed
reiserfs-kmp-default
suse enterprise server 15 SP4
5.14.21-150400.24.158.1
fixed
suse enterprise server 15 SP5
5.14.21-150500.55.100.1
fixed
Red Hat logo
Red Hat Enterprise Linux Releases
Red Hat Product
Release
bpftool
RHEL 9
0:7.0.0-284.11.1.el9_2
fixed
kernel
RHEL 9
0:5.14.0-284.11.1.el9_2
fixed
kernel-64k
RHEL 9
0:5.14.0-284.11.1.el9_2
fixed
kernel-64k-core
RHEL 9
0:5.14.0-284.11.1.el9_2
fixed
kernel-64k-debug
RHEL 9
0:5.14.0-284.11.1.el9_2
fixed
kernel-64k-debug-core
RHEL 9
0:5.14.0-284.11.1.el9_2
fixed
kernel-64k-debug-devel
RHEL 9
0:5.14.0-284.11.1.el9_2
fixed
kernel-64k-debug-devel-matched
RHEL 9
0:5.14.0-284.11.1.el9_2
fixed
kernel-64k-debug-modules
RHEL 9
0:5.14.0-284.11.1.el9_2
fixed
kernel-64k-debug-modules-core
RHEL 9
0:5.14.0-284.11.1.el9_2
fixed
kernel-64k-debug-modules-extra
RHEL 9
0:5.14.0-284.11.1.el9_2
fixed
kernel-64k-devel
RHEL 9
0:5.14.0-284.11.1.el9_2
fixed
kernel-64k-devel-matched
RHEL 9
0:5.14.0-284.11.1.el9_2
fixed
kernel-64k-modules
RHEL 9
0:5.14.0-284.11.1.el9_2
fixed
kernel-64k-modules-core
RHEL 9
0:5.14.0-284.11.1.el9_2
fixed
kernel-64k-modules-extra
RHEL 9
0:5.14.0-284.11.1.el9_2
fixed
kernel-abi-stablelists
RHEL 9
0:5.14.0-284.11.1.el9_2
fixed
kernel-core
RHEL 9
0:5.14.0-284.11.1.el9_2
fixed
kernel-debug
RHEL 9
0:5.14.0-284.11.1.el9_2
fixed
kernel-debug-core
RHEL 9
0:5.14.0-284.11.1.el9_2
fixed
kernel-debug-devel
RHEL 9
0:5.14.0-284.11.1.el9_2
fixed
kernel-debug-devel-matched
RHEL 9
0:5.14.0-284.11.1.el9_2
fixed
kernel-debug-modules
RHEL 9
0:5.14.0-284.11.1.el9_2
fixed
kernel-debug-modules-core
RHEL 9
0:5.14.0-284.11.1.el9_2
fixed
kernel-debug-modules-extra
RHEL 9
0:5.14.0-284.11.1.el9_2
fixed
kernel-debug-uki-virt
RHEL 9
0:5.14.0-284.11.1.el9_2
fixed
kernel-devel
RHEL 9
0:5.14.0-284.11.1.el9_2
fixed
kernel-devel-matched
RHEL 9
0:5.14.0-284.11.1.el9_2
fixed
kernel-doc
RHEL 9
0:5.14.0-284.11.1.el9_2
fixed
kernel-modules
RHEL 9
0:5.14.0-284.11.1.el9_2
fixed
kernel-modules-core
RHEL 9
0:5.14.0-284.11.1.el9_2
fixed
kernel-modules-extra
RHEL 9
0:5.14.0-284.11.1.el9_2
fixed
kernel-tools
RHEL 9
0:5.14.0-284.11.1.el9_2
fixed
kernel-tools-libs
RHEL 9
0:5.14.0-284.11.1.el9_2
fixed
kernel-tools-libs-devel
RHEL 9
0:5.14.0-284.11.1.el9_2
fixed
kernel-uki-virt
RHEL 9
0:5.14.0-284.11.1.el9_2
fixed
kernel-zfcpdump
RHEL 9
0:5.14.0-284.11.1.el9_2
fixed
kernel-zfcpdump-core
RHEL 9
0:5.14.0-284.11.1.el9_2
fixed
kernel-zfcpdump-devel
RHEL 9
0:5.14.0-284.11.1.el9_2
fixed
kernel-zfcpdump-devel-matched
RHEL 9
0:5.14.0-284.11.1.el9_2
fixed
kernel-zfcpdump-modules
RHEL 9
0:5.14.0-284.11.1.el9_2
fixed
kernel-zfcpdump-modules-core
RHEL 9
0:5.14.0-284.11.1.el9_2
fixed
kernel-zfcpdump-modules-extra
RHEL 9
0:5.14.0-284.11.1.el9_2
fixed
perf
RHEL 9
0:5.14.0-284.11.1.el9_2
fixed
python3-perf
RHEL 9
0:5.14.0-284.11.1.el9_2
fixed
rtla
RHEL 9
0:5.14.0-284.11.1.el9_2
fixed