{
   "containers": {
      "cna": {
         "providerMetadata": {
            "orgId": "f4215fc3-5b6b-47ff-a258-f7189bd81038"
         },
         "descriptions": [
            {
               "lang": "en",
               "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nworkqueue: Improve scalability of workqueue watchdog touch\n\nOn a ~2000 CPU powerpc system, hard lockups have been observed in the\nworkqueue code when stop_machine runs (in this case due to CPU hotplug).\nThis is due to lots of CPUs spinning in multi_cpu_stop, calling\ntouch_nmi_watchdog() which ends up calling wq_watchdog_touch().\nwq_watchdog_touch() writes to the global variable wq_watchdog_touched,\nand that can find itself in the same cacheline as other important\nworkqueue data, which slows down operations to the point of lockups.\n\nIn the case of the following abridged trace, worker_pool_idr was in\nthe hot line, causing the lockups to always appear at idr_find.\n\n  watchdog: CPU 1125 self-detected hard LOCKUP @ idr_find\n  Call Trace:\n  get_work_pool\n  __queue_work\n  call_timer_fn\n  run_timer_softirq\n  __do_softirq\n  do_softirq_own_stack\n  irq_exit\n  timer_interrupt\n  decrementer_common_virt\n  * interrupt: 900 (timer) at multi_cpu_stop\n  multi_cpu_stop\n  cpu_stopper_thread\n  smpboot_thread_fn\n  kthread\n\nFix this by having wq_watchdog_touch() only write to the line if the\nlast time a touch was recorded exceeds 1/4 of the watchdog threshold."
            }
         ],
         "affected": [
            {
               "product": "Linux",
               "vendor": "Linux",
               "defaultStatus": "unaffected",
               "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
               "programFiles": [
                  "kernel/workqueue.c"
               ],
               "versions": [
                  {
                     "version": "1da177e4c3f4",
                     "lessThan": "9d08fce64dd7",
                     "status": "affected",
                     "versionType": "git"
                  },
                  {
                     "version": "1da177e4c3f4",
                     "lessThan": "a2abd35e7dc5",
                     "status": "affected",
                     "versionType": "git"
                  },
                  {
                     "version": "1da177e4c3f4",
                     "lessThan": "241bce1c757d",
                     "status": "affected",
                     "versionType": "git"
                  },
                  {
                     "version": "1da177e4c3f4",
                     "lessThan": "da5f374103a1",
                     "status": "affected",
                     "versionType": "git"
                  },
                  {
                     "version": "1da177e4c3f4",
                     "lessThan": "98f887f820c9",
                     "status": "affected",
                     "versionType": "git"
                  }
               ]
            },
            {
               "product": "Linux",
               "vendor": "Linux",
               "defaultStatus": "affected",
               "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
               "programFiles": [
                  "kernel/workqueue.c"
               ],
               "versions": [
                  {
                     "version": "5.15.167",
                     "lessThanOrEqual": "5.15.*",
                     "status": "unaffected",
                     "versionType": "custom"
                  },
                  {
                     "version": "6.1.110",
                     "lessThanOrEqual": "6.1.*",
                     "status": "unaffected",
                     "versionType": "custom"
                  },
                  {
                     "version": "6.6.51",
                     "lessThanOrEqual": "6.6.*",
                     "status": "unaffected",
                     "versionType": "custom"
                  },
                  {
                     "version": "6.10.10",
                     "lessThanOrEqual": "6.10.*",
                     "status": "unaffected",
                     "versionType": "custom"
                  },
                  {
                     "version": "6.11",
                     "lessThanOrEqual": "*",
                     "status": "unaffected",
                     "versionType": "original_commit_for_fix"
                  }
               ]
            }
         ],
         "references": [
            {
               "url": "https://git.kernel.org/stable/c/9d08fce64dd77f42e2361a4818dbc4b50f3c7dad"
            },
            {
               "url": "https://git.kernel.org/stable/c/a2abd35e7dc55bf9ed01e2b3481fa78e086d3bf4"
            },
            {
               "url": "https://git.kernel.org/stable/c/241bce1c757d0587721512296952e6bba69631ed"
            },
            {
               "url": "https://git.kernel.org/stable/c/da5f374103a1e0881bbd35847dc57b04ac155eb0"
            },
            {
               "url": "https://git.kernel.org/stable/c/98f887f820c993e05a12e8aa816c80b8661d4c87"
            }
         ],
         "title": "workqueue: Improve scalability of workqueue watchdog touch",
         "x_generator": {
            "engine": "bippy-c9c4e1df01b2"
         }
      }
   },
   "cveMetadata": {
      "assignerOrgId": "f4215fc3-5b6b-47ff-a258-f7189bd81038",
      "cveID": "CVE-2024-46839",
      "requesterUserId": "gregkh@kernel.org",
      "serial": "1",
      "state": "PUBLISHED"
   },
   "dataType": "CVE_RECORD",
   "dataVersion": "5.0"
}
