{"dataType":"CVE_RECORD","dataVersion":"5.2","cveMetadata":{"cveId":"CVE-2021-47450","assignerOrgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","state":"PUBLISHED","assignerShortName":"Linux","dateReserved":"2024-05-21T14:58:30.832Z","datePublished":"2024-05-22T06:19:41.443Z","dateUpdated":"2026-08-05T08:47:53.018Z"},"containers":{"cna":{"providerMetadata":{"orgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","shortName":"Linux","dateUpdated":"2026-08-05T08:47:53.018Z"},"descriptions":[{"lang":"en","value":"In the Linux kernel, the following vulnerability has been resolved:\n\nKVM: arm64: Fix host stage-2 PGD refcount\n\nThe KVM page-table library refcounts the pages of concatenated stage-2\nPGDs individually. However, when running KVM in protected mode, the\nhost's stage-2 PGD is currently managed by EL2 as a single high-order\ncompound page, which can cause the refcount of the tail pages to reach 0\nwhen they shouldn't, hence corrupting the page-table.\n\nFix this by introducing a new hyp_split_page() helper in the EL2 page\nallocator (matching the kernel's split_page() function), and make use of\nit from host_s2_zalloc_pages_exact()."}],"metrics":[{"cvssV3_1":{"version":"3.1","vectorString":"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H","baseScore":8.8,"baseSeverity":"HIGH"},"scenarios":[{"lang":"en","value":"AV:L - The bug is in pKVM EL2 host stage-2 PGD refcounting and is reached via local host activity (host stage-2 faults, KVM/hyp share/donate paths), not via remote packet processing.\nAC:L - Once pKVM protected mode is enabled, emptying the last counted PTE in a concatenated PGD tail page deterministically drives that page's refcount to zero and frees it while it remains part of the live PGD; an attacker who can cause host stage-2 map/unmap churn can reliably provoke this.\nPR:L - On the primary pKVM deployment (e.g. Android), a normal local user who can drive host MMIO/KVM-related stage-2 updates can reach the vulnerable get/put_page path without needing real root in the init namespace.\nUI:N - No separate victim action is required; the attacker triggers the map/unmap sequence themselves.\nS:C - Corruption is of the EL2 host stage-2 page tables that enforce the pKVM isolation boundary between the host and the hypervisor/protected VMs, so impact crosses that security authority.\nC:H - Incorrectly freeing an in-use PGD page is a page-table UAF; reuse of that page can yield attacker-controlled stage-2 entries and arbitrary host/hyp memory disclosure across the pKVM boundary.\nI:H - The same PGD UAF enables installation of malicious stage-2 mappings and control-flow/memory integrity breaks in the hypervisor-managed host view of physical memory.\nA:H - Freeing or corrupting live host stage-2 PGD pages can panic EL2, oops the host, or otherwise crash the system."}]}],"affected":[{"product":"Linux","vendor":"Linux","defaultStatus":"unaffected","repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["arch/arm64/kvm/hyp/include/nvhe/gfp.h","arch/arm64/kvm/hyp/nvhe/mem_protect.c","arch/arm64/kvm/hyp/nvhe/page_alloc.c"],"versions":[{"version":"1025c8c0c6accfcbdc8f52ca1940160f65cd87d6","lessThan":"b372264c66ef78f2cab44e877fbd765ad6d24c39","status":"affected","versionType":"git"},{"version":"1025c8c0c6accfcbdc8f52ca1940160f65cd87d6","lessThan":"1d58a17ef54599506d44c45ac95be27273a4d2b1","status":"affected","versionType":"git"}]},{"product":"Linux","vendor":"Linux","defaultStatus":"affected","repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["arch/arm64/kvm/hyp/include/nvhe/gfp.h","arch/arm64/kvm/hyp/nvhe/mem_protect.c","arch/arm64/kvm/hyp/nvhe/page_alloc.c"],"versions":[{"version":"5.13","status":"affected"},{"version":"0","lessThan":"5.13","status":"unaffected","versionType":"semver"},{"version":"5.14.15","lessThanOrEqual":"5.14.*","status":"unaffected","versionType":"semver"},{"version":"5.15","lessThanOrEqual":"*","status":"unaffected","versionType":"original_commit_for_fix"}]}],"cpeApplicability":[{"nodes":[{"operator":"OR","negate":false,"cpeMatch":[{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"5.13","versionEndExcluding":"5.14.15"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"5.13","versionEndExcluding":"5.15"}]}]}],"references":[{"url":"https://git.kernel.org/stable/c/b372264c66ef78f2cab44e877fbd765ad6d24c39"},{"url":"https://git.kernel.org/stable/c/1d58a17ef54599506d44c45ac95be27273a4d2b1"}],"title":"KVM: arm64: Fix host stage-2 PGD refcount","x_generator":{"engine":"bippy-1.2.0"}},"adp":[{"title":"CISA ADP Vulnrichment","metrics":[{"other":{"type":"ssvc","content":{"id":"CVE-2021-47450","role":"CISA Coordinator","options":[{"Exploitation":"none"},{"Automatable":"no"},{"Technical Impact":"partial"}],"version":"2.0.3","timestamp":"2024-05-22T18:46:22.813390Z"}}}],"providerMetadata":{"orgId":"134c704f-9b21-4f2e-91b3-4a467353bcc0","shortName":"CISA-ADP","dateUpdated":"2024-06-04T17:14:28.577Z"}},{"providerMetadata":{"orgId":"af854a3a-2127-422b-91ae-364da2661108","shortName":"CVE","dateUpdated":"2024-08-04T05:39:59.495Z"},"title":"CVE Program Container","references":[{"url":"https://git.kernel.org/stable/c/b372264c66ef78f2cab44e877fbd765ad6d24c39","tags":["x_transferred"]},{"url":"https://git.kernel.org/stable/c/1d58a17ef54599506d44c45ac95be27273a4d2b1","tags":["x_transferred"]}]}]}}