cve-2024-35860
Vulnerability from cvelistv5
Published
2024-05-19 08:34
Modified
2024-09-11 17:33
Severity
Summary
bpf: support deferring bpf_link dealloc to after RCU grace period
Impacted products
VendorProduct
LinuxLinux
LinuxLinux
Show details on NVD website


{
  "containers": {
    "adp": [
      {
        "providerMetadata": {
          "dateUpdated": "2024-08-02T03:21:48.532Z",
          "orgId": "af854a3a-2127-422b-91ae-364da2661108",
          "shortName": "CVE"
        },
        "references": [
          {
            "tags": [
              "x_transferred"
            ],
            "url": "https://git.kernel.org/stable/c/876941f533e7b47fc69977fc4551c02f2d18af97"
          },
          {
            "tags": [
              "x_transferred"
            ],
            "url": "https://git.kernel.org/stable/c/5d8d447777564b35f67000e7838e7ccb64d525c8"
          },
          {
            "tags": [
              "x_transferred"
            ],
            "url": "https://git.kernel.org/stable/c/1a80dbcb2dbaf6e4c216e62e30fa7d3daa8001ce"
          }
        ],
        "title": "CVE Program Container"
      },
      {
        "metrics": [
          {
            "other": {
              "content": {
                "id": "CVE-2024-35860",
                "options": [
                  {
                    "Exploitation": "none"
                  },
                  {
                    "Automatable": "no"
                  },
                  {
                    "Technical Impact": "partial"
                  }
                ],
                "role": "CISA Coordinator",
                "timestamp": "2024-09-10T15:41:33.868687Z",
                "version": "2.0.3"
              },
              "type": "ssvc"
            }
          }
        ],
        "providerMetadata": {
          "dateUpdated": "2024-09-11T17:33:17.617Z",
          "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
          "shortName": "CISA-ADP"
        },
        "title": "CISA ADP Vulnrichment"
      }
    ],
    "cna": {
      "affected": [
        {
          "defaultStatus": "unaffected",
          "product": "Linux",
          "programFiles": [
            "include/linux/bpf.h",
            "kernel/bpf/syscall.c",
            "kernel/trace/bpf_trace.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "lessThan": "876941f533e7",
              "status": "affected",
              "version": "0dcac2725406",
              "versionType": "git"
            },
            {
              "lessThan": "5d8d44777756",
              "status": "affected",
              "version": "0dcac2725406",
              "versionType": "git"
            },
            {
              "lessThan": "1a80dbcb2dba",
              "status": "affected",
              "version": "0dcac2725406",
              "versionType": "git"
            }
          ]
        },
        {
          "defaultStatus": "affected",
          "product": "Linux",
          "programFiles": [
            "include/linux/bpf.h",
            "kernel/bpf/syscall.c",
            "kernel/trace/bpf_trace.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "status": "affected",
              "version": "5.18"
            },
            {
              "lessThan": "5.18",
              "status": "unaffected",
              "version": "0",
              "versionType": "custom"
            },
            {
              "lessThanOrEqual": "6.6.*",
              "status": "unaffected",
              "version": "6.6.26",
              "versionType": "custom"
            },
            {
              "lessThanOrEqual": "6.8.*",
              "status": "unaffected",
              "version": "6.8.5",
              "versionType": "custom"
            },
            {
              "lessThanOrEqual": "*",
              "status": "unaffected",
              "version": "6.9",
              "versionType": "original_commit_for_fix"
            }
          ]
        }
      ],
      "descriptions": [
        {
          "lang": "en",
          "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nbpf: support deferring bpf_link dealloc to after RCU grace period\n\nBPF link for some program types is passed as a \"context\" which can be\nused by those BPF programs to look up additional information. E.g., for\nmulti-kprobes and multi-uprobes, link is used to fetch BPF cookie values.\n\nBecause of this runtime dependency, when bpf_link refcnt drops to zero\nthere could still be active BPF programs running accessing link data.\n\nThis patch adds generic support to defer bpf_link dealloc callback to\nafter RCU GP, if requested. This is done by exposing two different\ndeallocation callbacks, one synchronous and one deferred. If deferred\none is provided, bpf_link_free() will schedule dealloc_deferred()\ncallback to happen after RCU GP.\n\nBPF is using two flavors of RCU: \"classic\" non-sleepable one and RCU\ntasks trace one. The latter is used when sleepable BPF programs are\nused. bpf_link_free() accommodates that by checking underlying BPF\nprogram\u0027s sleepable flag, and goes either through normal RCU GP only for\nnon-sleepable, or through RCU tasks trace GP *and* then normal RCU GP\n(taking into account rcu_trace_implies_rcu_gp() optimization), if BPF\nprogram is sleepable.\n\nWe use this for multi-kprobe and multi-uprobe links, which dereference\nlink during program run. We also preventively switch raw_tp link to use\ndeferred dealloc callback, as upcoming changes in bpf-next tree expose\nraw_tp link data (specifically, cookie value) to BPF program at runtime\nas well."
        }
      ],
      "providerMetadata": {
        "dateUpdated": "2024-05-29T05:30:16.407Z",
        "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "shortName": "Linux"
      },
      "references": [
        {
          "url": "https://git.kernel.org/stable/c/876941f533e7b47fc69977fc4551c02f2d18af97"
        },
        {
          "url": "https://git.kernel.org/stable/c/5d8d447777564b35f67000e7838e7ccb64d525c8"
        },
        {
          "url": "https://git.kernel.org/stable/c/1a80dbcb2dbaf6e4c216e62e30fa7d3daa8001ce"
        }
      ],
      "title": "bpf: support deferring bpf_link dealloc to after RCU grace period",
      "x_generator": {
        "engine": "bippy-a5840b7849dd"
      }
    }
  },
  "cveMetadata": {
    "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
    "assignerShortName": "Linux",
    "cveId": "CVE-2024-35860",
    "datePublished": "2024-05-19T08:34:19.368Z",
    "dateReserved": "2024-05-17T13:50:33.107Z",
    "dateUpdated": "2024-09-11T17:33:17.617Z",
    "state": "PUBLISHED"
  },
  "dataType": "CVE_RECORD",
  "dataVersion": "5.1",
  "meta": {
    "nvd": "{\"cve\":{\"id\":\"CVE-2024-35860\",\"sourceIdentifier\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"published\":\"2024-05-19T09:15:07.603\",\"lastModified\":\"2024-05-20T13:00:04.957\",\"vulnStatus\":\"Awaiting Analysis\",\"descriptions\":[{\"lang\":\"en\",\"value\":\"In the Linux kernel, the following vulnerability has been resolved:\\n\\nbpf: support deferring bpf_link dealloc to after RCU grace period\\n\\nBPF link for some program types is passed as a \\\"context\\\" which can be\\nused by those BPF programs to look up additional information. E.g., for\\nmulti-kprobes and multi-uprobes, link is used to fetch BPF cookie values.\\n\\nBecause of this runtime dependency, when bpf_link refcnt drops to zero\\nthere could still be active BPF programs running accessing link data.\\n\\nThis patch adds generic support to defer bpf_link dealloc callback to\\nafter RCU GP, if requested. This is done by exposing two different\\ndeallocation callbacks, one synchronous and one deferred. If deferred\\none is provided, bpf_link_free() will schedule dealloc_deferred()\\ncallback to happen after RCU GP.\\n\\nBPF is using two flavors of RCU: \\\"classic\\\" non-sleepable one and RCU\\ntasks trace one. The latter is used when sleepable BPF programs are\\nused. bpf_link_free() accommodates that by checking underlying BPF\\nprogram\u0027s sleepable flag, and goes either through normal RCU GP only for\\nnon-sleepable, or through RCU tasks trace GP *and* then normal RCU GP\\n(taking into account rcu_trace_implies_rcu_gp() optimization), if BPF\\nprogram is sleepable.\\n\\nWe use this for multi-kprobe and multi-uprobe links, which dereference\\nlink during program run. We also preventively switch raw_tp link to use\\ndeferred dealloc callback, as upcoming changes in bpf-next tree expose\\nraw_tp link data (specifically, cookie value) to BPF program at runtime\\nas well.\"},{\"lang\":\"es\",\"value\":\"En el kernel de Linux, se resolvi\u00f3 la siguiente vulnerabilidad: bpf: se admite el aplazamiento de la asignaci\u00f3n de bpf_link despu\u00e9s del per\u00edodo de gracia de RCU. El enlace BPF para algunos tipos de programas se pasa como un \\\"contexto\\\" que pueden utilizar esos programas BPF para buscar informaci\u00f3n adicional. Por ejemplo, para multi-kprobes y multi-uprobes, el enlace se utiliza para recuperar valores de cookies BPF. Debido a esta dependencia del tiempo de ejecuci\u00f3n, cuando bpf_link refcnt cae a cero, todav\u00eda podr\u00eda haber programas BPF activos ejecut\u00e1ndose y accediendo a los datos del enlace. Este parche agrega soporte gen\u00e9rico para diferir la devoluci\u00f3n de llamada de bpf_link dealloc despu\u00e9s de RCU GP, si se solicita. Esto se hace exponiendo dos devoluciones de llamada de desasignaci\u00f3n diferentes, una sincr\u00f3nica y otra diferida. Si se proporciona uno diferido, bpf_link_free() programar\u00e1 la devoluci\u00f3n de llamada de dealloc_deferred() para que se realice despu\u00e9s de RCU GP. BPF utiliza dos tipos de RCU: uno \\\"cl\u00e1sico\\\" que no se puede dormir y uno de seguimiento de tareas de RCU. Este \u00faltimo se utiliza cuando se utilizan programas BPF que se pueden dormir. bpf_link_free() se adapta a eso al verificar el indicador de suspensi\u00f3n del programa BPF subyacente, y pasa por la GP de RCU normal solo para los no dormidos, o a trav\u00e9s de tareas de RCU rastrean la GP *y* luego la GP de RCU normal (teniendo en cuenta la optimizaci\u00f3n de rcu_trace_implies_rcu_gp()), si El programa BPF se puede dormir. Usamos esto para enlaces multi-kprobe y multi-uprobe, que desreferencian el enlace durante la ejecuci\u00f3n del programa. Tambi\u00e9n cambiamos preventivamente el enlace raw_tp para usar la devoluci\u00f3n de llamada de dealloc diferida, ya que los pr\u00f3ximos cambios en el \u00e1rbol bpf-next tambi\u00e9n exponen los datos del enlace raw_tp (espec\u00edficamente, el valor de la cookie) al programa BPF en tiempo de ejecuci\u00f3n.\"}],\"metrics\":{},\"references\":[{\"url\":\"https://git.kernel.org/stable/c/1a80dbcb2dbaf6e4c216e62e30fa7d3daa8001ce\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"},{\"url\":\"https://git.kernel.org/stable/c/5d8d447777564b35f67000e7838e7ccb64d525c8\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"},{\"url\":\"https://git.kernel.org/stable/c/876941f533e7b47fc69977fc4551c02f2d18af97\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"}]}}"
  }
}


Log in or create an account to share your comment.




Tags
Taxonomy of the tags.


Loading...

Loading...