Description
In the Linux kernel, the following vulnerability has been resolved: mm/percpu-km: fix bitmap overflow and accounting in pcpu_create_chunk() In pcpu_create_chunk(), nr_pages is the total contiguous backing allocation, i.e., nr_units * pcpu_unit_pages, but pcpu_chunk_populated() uses it to set chunk->populated, whose size is pcpu_unit_pages, bitmap. Since bit N in chunk->populated means page offset N inside every unit is backed. When nr_units > 1, the function writes beyond chunk->populated. Fix it by using chunk->nr_pages. It also fixes the global pcpu_nr_empty_pop_pages accounting, since pcpu_balance_free() only iterates up to chunk->nr_pages. Commit a63d4ac4ab609 ("percpu: make percpu-km set chunk->populated bitmap properly") introduced the bitmap overflow issue. Later, commit b539b87fed37f ("percpu: implmeent pcpu_nr_empty_pop_pages and chunk->nr_populated") added pcpu_nr_empty_pop_pages and caused the accounting issue.
Affected products
Version statuses are supplied by the assigning organization. Consult the original record for detailed ranges and platform conditions.
Linux Linux
Default version status: unaffected
a63d4ac4ab6094c051a5a240260d16117a7a2f86 to < 5f43d2c1bea280dcdfabaf156c25e7402fb8039faffecteda63d4ac4ab6094c051a5a240260d16117a7a2f86 to < 92c43ac3c2b09eb16162e8144e73c00b7c3e29d6affecteda63d4ac4ab6094c051a5a240260d16117a7a2f86 to < 6fc7da2a052f2825fff785e860e67183f5acaabaaffecteda63d4ac4ab6094c051a5a240260d16117a7a2f86 to < 01504da375f5b19df195cb1cb1cf1dd184318f97affecteda63d4ac4ab6094c051a5a240260d16117a7a2f86 to < a6940b84c8c035da465b7165fdfcfb005545724eaffecteda63d4ac4ab6094c051a5a240260d16117a7a2f86 to < 32134cf9211b83bed9076d0739c5906fbea4c763affecteda63d4ac4ab6094c051a5a240260d16117a7a2f86 to < 5c7fc39bf19abb38a996aaad77b3e3a8f48581c3affecteda63d4ac4ab6094c051a5a240260d16117a7a2f86 to < 89b1b79c308818a715e75f28744b70d8940a07c9affected
Linux Linux
Default version status: affected
3.18affected0 to < 3.18unaffected5.10.265 to ≤ 5.10.*unaffected5.15.216 to ≤ 5.15.*unaffected6.1.183 to ≤ 6.1.*unaffected6.6.151 to ≤ 6.6.*unaffected6.12.103 to ≤ 6.12.*unaffected6.18.44 to ≤ 6.18.*unaffected7.1.8 to ≤ 7.1.*unaffected7.2 to ≤ *unaffected
References
- https://git.kernel.org/stable/c/5f43d2c1bea280dcdfabaf156c25e7402fb8039f ↗
- https://git.kernel.org/stable/c/92c43ac3c2b09eb16162e8144e73c00b7c3e29d6 ↗
- https://git.kernel.org/stable/c/6fc7da2a052f2825fff785e860e67183f5acaaba ↗
- https://git.kernel.org/stable/c/01504da375f5b19df195cb1cb1cf1dd184318f97 ↗
- https://git.kernel.org/stable/c/a6940b84c8c035da465b7165fdfcfb005545724e ↗
- https://git.kernel.org/stable/c/32134cf9211b83bed9076d0739c5906fbea4c763 ↗
- https://git.kernel.org/stable/c/5c7fc39bf19abb38a996aaad77b3e3a8f48581c3 ↗
- https://git.kernel.org/stable/c/89b1b79c308818a715e75f28744b70d8940a07c9 ↗