Lucene search

K
cve416baaa9-dc9f-4396-8d5f-8c081fb06d67CVE-2021-47592
HistoryJun 19, 2024 - 3:15 p.m.

CVE-2021-47592

2024-06-1915:15:53
416baaa9-dc9f-4396-8d5f-8c081fb06d67
web.nvd.nist.gov
21
linux kernel
vulnerability
vlan priority rx steering
tc filter
stmmac
flow rule
flow dissector
null pointer.

6.2 Medium

AI Score

Confidence

Low

0.0004 Low

EPSS

Percentile

9.1%

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

net: stmmac: fix tc flower deletion for VLAN priority Rx steering

To replicate the issue:-

  1. Add 1 flower filter for VLAN Priority based frame steering:-
    $ IFDEVNAME=eth0
    $ tc qdisc add dev $IFDEVNAME ingress
    $ tc qdisc add dev $IFDEVNAME root mqprio num_tc 8
    map 0 1 2 3 4 5 6 7 0 0 0 0 0 0 0 0
    queues 1@0 1@1 1@2 1@3 1@4 1@5 1@6 1@7 hw 0
    $ tc filter add dev $IFDEVNAME parent ffff: protocol 802.1Q
    flower vlan_prio 0 hw_tc 0

  2. Get the ‘pref’ id
    $ tc filter show dev $IFDEVNAME ingress

  3. Delete a specific tc flower record (say pref 49151)
    $ tc filter del dev $IFDEVNAME parent ffff: pref 49151

From dmesg, we will observe kernel NULL pointer ooops

[ 197.170464] BUG: kernel NULL pointer dereference, address: 0000000000000000
[ 197.171367] #PF: supervisor read access in kernel mode
[ 197.171367] #PF: error_code(0x0000) - not-present page
[ 197.171367] PGD 0 P4D 0
[ 197.171367] Oops: 0000 [#1] PREEMPT SMP NOPTI

<snip>

[ 197.171367] RIP: 0010:tc_setup_cls+0x20b/0x4a0 [stmmac]

<snip>

[ 197.171367] Call Trace:
[ 197.171367] <TASK>
[ 197.171367] ? __stmmac_disable_all_queues+0xa8/0xe0 [stmmac]
[ 197.171367] stmmac_setup_tc_block_cb+0x70/0x110 [stmmac]
[ 197.171367] tc_setup_cb_destroy+0xb3/0x180
[ 197.171367] fl_hw_destroy_filter+0x94/0xc0 [cls_flower]

The above issue is due to previous incorrect implementation of
tc_del_vlan_flow(), shown below, that uses flow_cls_offload_flow_rule()
to get struct flow_rule *rule which is no longer valid for tc filter
delete operation.

struct flow_rule *rule = flow_cls_offload_flow_rule(cls);
struct flow_dissector *dissector = rule->match.dissector;

So, to ensure tc_del_vlan_flow() deletes the right VLAN cls record for
earlier configured RX queue (configured by hw_tc) in tc_add_vlan_flow(),
this patch introduces stmmac_rfs_entry as driver-side flow_cls_offload
record for ‘RX frame steering’ tc flower, currently used for VLAN
priority. The implementation has taken consideration for future extension
to include other type RX frame steering such as EtherType based.

v2:

  • Clean up overly extensive backtrace and rewrite git message to better
    explain the kernel NULL pointer issue.

Affected configurations

Vulners
Node
linuxlinux_kernelRange5.135.15.11
OR
linuxlinux_kernelRange5.16.0

CNA Affected

[
  {
    "product": "Linux",
    "vendor": "Linux",
    "defaultStatus": "unaffected",
    "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
    "programFiles": [
      "drivers/net/ethernet/stmicro/stmmac/stmmac.h",
      "drivers/net/ethernet/stmicro/stmmac/stmmac_tc.c"
    ],
    "versions": [
      {
        "version": "0e039f5cf86c",
        "lessThan": "97cb5c82aa1d",
        "status": "affected",
        "versionType": "git"
      },
      {
        "version": "0e039f5cf86c",
        "lessThan": "aeb7c75cb774",
        "status": "affected",
        "versionType": "git"
      }
    ]
  },
  {
    "product": "Linux",
    "vendor": "Linux",
    "defaultStatus": "affected",
    "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
    "programFiles": [
      "drivers/net/ethernet/stmicro/stmmac/stmmac.h",
      "drivers/net/ethernet/stmicro/stmmac/stmmac_tc.c"
    ],
    "versions": [
      {
        "version": "5.13",
        "status": "affected"
      },
      {
        "version": "0",
        "lessThan": "5.13",
        "status": "unaffected",
        "versionType": "custom"
      },
      {
        "version": "5.15.11",
        "lessThanOrEqual": "5.15.*",
        "status": "unaffected",
        "versionType": "custom"
      },
      {
        "version": "5.16",
        "lessThanOrEqual": "*",
        "status": "unaffected",
        "versionType": "original_commit_for_fix"
      }
    ]
  }
]

6.2 Medium

AI Score

Confidence

Low

0.0004 Low

EPSS

Percentile

9.1%