NULL Pointer Dereference Affecting kernel-debug-devel package, versions <0:5.14.0-427.31.1.el9_4


Severity

Recommended
high

Based on Rocky Linux security rating.

Threat Intelligence

EPSS
0.04% (5th percentile)

Do your applications use this vulnerable package?

In a few clicks we can analyze your entire application and see what components are vulnerable in your application, and suggest you quick fixes.

Test your applications

Snyk Learn

Learn about NULL Pointer Dereference vulnerabilities in an interactive lesson.

Start learning
  • Snyk IDSNYK-ROCKY9-KERNELDEBUGDEVEL-7778289
  • published22 Aug 2024
  • disclosed21 Jun 2024

Introduced: 21 Jun 2024

CVE-2024-36489  (opens in a new tab)
CWE-476  (opens in a new tab)

How to fix?

Upgrade Rocky-Linux:9 kernel-debug-devel to version 0:5.14.0-427.31.1.el9_4 or higher.
This issue was patched in RLSA-2024:5363.

NVD Description

Note: Versions mentioned in the description apply only to the upstream kernel-debug-devel package and not the kernel-debug-devel package as distributed by Rocky-Linux. See How to fix? for Rocky-Linux:9 relevant fixed versions and status.

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

tls: fix missing memory barrier in tls_init

In tls_init(), a write memory barrier is missing, and store-store reordering may cause NULL dereference in tls_{setsockopt,getsockopt}.

CPU0 CPU1


// In tls_init() // In tls_ctx_create() ctx = kzalloc() ctx->sk_proto = READ_ONCE(sk->sk_prot) -(1)

// In update_sk_prot() WRITE_ONCE(sk->sk_prot, tls_prots) -(2)

                               // In sock_common_setsockopt()
                               READ_ONCE(sk-&gt;sk_prot)-&gt;setsockopt()

                           // In tls_{setsockopt,getsockopt}()
                           ctx-&amp;gt;sk_proto-&amp;gt;setsockopt()    -(3)

In the above scenario, when (1) and (2) are reordered, (3) can observe the NULL value of ctx->sk_proto, causing NULL dereference.

To fix it, we rely on rcu_assign_pointer() which implies the release barrier semantic. By moving rcu_assign_pointer() after ctx->sk_proto is initialized, we can ensure that ctx->sk_proto are visible when changing sk->sk_prot.

CVSS Scores

version 3.1