---
id: CVE-2021-47013
title: |-
  In the Linux kernel, the following vulnerability has been resolved:

  net:emac/emac-mac: Fix a use after free in emac_mac_tx_buf_send

  In emac_mac_tx_buf_send, it calls emac_tx_fill_tpd(..,skb,..).
  If some error happens in emac_tx_fill_tp…
summary: |-
  In the Linux kernel, the following vulnerability has been resolved:

  net:emac/emac-mac: Fix a use after free in emac_mac_tx_buf_send

  In emac_mac_tx_buf_send, it calls emac_tx_fill_tpd(..,skb,..).
  If some error happens in emac_tx_fill_tp…
severity: critical
cvss: 9.8
cvssVector: 'CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H'
cwe:
  - CWE-416
vendor: linux
product: linux_kernel
affected:
  - 'linux_kernel >= 4.9, < 4.9.269'
  - 'linux_kernel >= 4.10, < 4.14.233'
  - 'linux_kernel >= 4.15, < 4.19.191'
  - 'linux_kernel >= 4.20, < 5.4.119'
  - 'linux_kernel >= 5.5, < 5.10.37'
  - 'linux_kernel >= 5.11, < 5.11.21'
  - 'linux_kernel >= 5.12, < 5.12.4'
patched:
  - linux_kernel 5.12.4
published: '2024-02-28'
updated: '2026-08-04'
source: NVD
sourceUrl: 'https://nvd.nist.gov/vuln/detail/CVE-2021-47013'
references:
  - url: 'https://git.kernel.org/stable/c/16d8c44be52e3650917736d45f5904384a9da834'
    label: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
  - url: 'https://git.kernel.org/stable/c/55fcdd1258faaecca74b91b88cc0921f9edd775d'
    label: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
  - url: 'https://git.kernel.org/stable/c/6d72e7c767acbbdd44ebc7d89c6690b405b32b57'
    label: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
  - url: 'https://git.kernel.org/stable/c/8c06f34785068b87e2b560534c77c163d6c6dca7'
    label: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
  - url: 'https://git.kernel.org/stable/c/9dc373f74097edd0e35f3393d6248eda8d1ba99d'
    label: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
  - url: 'https://git.kernel.org/stable/c/c7f75d11fe72913d2619f97b2334b083cd7bb955'
    label: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
  - url: 'https://git.kernel.org/stable/c/dc1b438a35773d030be0ee80d9c635c3e558a322'
    label: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
  - url: 'https://git.kernel.org/stable/c/e407495ba6788a67d1bd41714158c079e340879b'
    label: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
  - url: 'https://git.kernel.org/stable/c/16d8c44be52e3650917736d45f5904384a9da834'
    label: af854a3a-2127-422b-91ae-364da2661108
  - url: 'https://git.kernel.org/stable/c/55fcdd1258faaecca74b91b88cc0921f9edd775d'
    label: af854a3a-2127-422b-91ae-364da2661108
  - url: 'https://git.kernel.org/stable/c/6d72e7c767acbbdd44ebc7d89c6690b405b32b57'
    label: af854a3a-2127-422b-91ae-364da2661108
  - url: 'https://git.kernel.org/stable/c/8c06f34785068b87e2b560534c77c163d6c6dca7'
    label: af854a3a-2127-422b-91ae-364da2661108
  - url: 'https://git.kernel.org/stable/c/9dc373f74097edd0e35f3393d6248eda8d1ba99d'
    label: af854a3a-2127-422b-91ae-364da2661108
  - url: 'https://git.kernel.org/stable/c/c7f75d11fe72913d2619f97b2334b083cd7bb955'
    label: af854a3a-2127-422b-91ae-364da2661108
  - url: 'https://git.kernel.org/stable/c/dc1b438a35773d030be0ee80d9c635c3e558a322'
    label: af854a3a-2127-422b-91ae-364da2661108
  - url: 'https://git.kernel.org/stable/c/e407495ba6788a67d1bd41714158c079e340879b'
    label: af854a3a-2127-422b-91ae-364da2661108
tags:
  - nvd
epss: 0.00783
epssPercentile: 0.54571
ingestedAt: '2026-08-04T10:39:39.148Z'
---

## Overview

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

net:emac/emac-mac: Fix a use after free in emac_mac_tx_buf_send

In emac_mac_tx_buf_send, it calls emac_tx_fill_tpd(..,skb,..).
If some error happens in emac_tx_fill_tpd(), the skb will be freed via
dev_kfree_skb(skb) in error branch of emac_tx_fill_tpd().
But the freed skb is still used via skb->len by netdev_sent_queue(,skb->len).

As i observed that emac_tx_fill_tpd() haven't modified the value of skb->len,
thus my patch assigns skb->len to 'len' before the possible free and
use 'len' instead of skb->len later.

## Affected

- `linux_kernel >= 4.9, < 4.9.269`
- `linux_kernel >= 4.10, < 4.14.233`
- `linux_kernel >= 4.15, < 4.19.191`
- `linux_kernel >= 4.20, < 5.4.119`
- `linux_kernel >= 5.5, < 5.10.37`
- `linux_kernel >= 5.11, < 5.11.21`
- `linux_kernel >= 5.12, < 5.12.4`

## Remediation

Upgrade past the affected range:

- `linux_kernel 5.12.4`
