]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/commit
Fix abort in jemalloc extent coalescing.
authormw <mw@FreeBSD.org>
Fri, 18 Dec 2020 10:09:21 +0000 (10:09 +0000)
committermw <mw@FreeBSD.org>
Fri, 18 Dec 2020 10:09:21 +0000 (10:09 +0000)
commitb5356223336d9a745b1ffe6a91e9c4f424a21a72
treeb059bd73a15f3a0f704bc34dccb3afc47dd2c405
parent1c83b0f5a0c05edbb0ee778a283e7e318d0169e0
Fix abort in jemalloc extent coalescing.

Fix error in extent_try_coalesce_impl(), which could cause abort
to happen when trying to coalesce extents backwards. The error could
happen because of how extent_before_get() function works. This function
gets address of previous extent, by subtracting page size from current
extent address. If current extent is located at PAGE_SIZE offset, this
address resolved to 0x0000. An assertion in rtree_leaf_elm_lookup
then caused the running program to abort.

This problem was discovered when trying to build world on 32-bit
machines with ASLR and PIE enabled. The problem was encountered
on armv7 and i386 machines, but most likely other 32-bit
architectures are affected as well.

While this patch fixes one problem with buildworld on 32-bit platforms
with ASLR, the build still fails, however it happens much later
and due to lack of memory.

The change is aligned with accepted fix in the upstream Jemalloc
repository (https://github.com/jemalloc/jemalloc/pull/1973).
As it doesn't apply on top of Jemalloc tree, its updated version
was eventually merged: https://github.com/jemalloc/jemalloc/pull/2003

PR: 249937
Submitted by: Dawid Gorecki <dgr@semihalf.com>
Obtained from: Semihalf
Sponsored by: Stormshield
Differential Revision: https://reviews.freebsd.org/D27025
contrib/jemalloc/src/extent.c