]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
mempool: fix tile alignment check
authorLennart Poettering <lennart@poettering.net>
Fri, 24 Feb 2023 09:41:47 +0000 (10:41 +0100)
committerLennart Poettering <lennart@poettering.net>
Fri, 24 Feb 2023 13:11:31 +0000 (14:11 +0100)
We should check alignment *after* determining the pointer points into
our pool, not before. Otherwise might might end up checking alignment of
the pointer relative to our base, even though it is taken relative to
some other base.

Follow-up for: a2b052b29f8bc141e94a4af95d1653a38a57eaeb
See: https://github.com/systemd/systemd/pull/26393#issuecomment-1442295012

src/basic/mempool.c

index fa319bffdbf530d1f4838b9b138b422f8f06448e..391f29b66785e9a9a90571130982096486d8beb4 100644 (file)
@@ -98,9 +98,11 @@ static bool pool_contains(struct mempool *mp, struct pool *p, void *ptr) {
                 return false;
 
         off = (uint8_t*) ptr - (uint8_t*) a;
-        assert(off % mp->tile_size == 0);
+        if (off >= mp->tile_size * p->n_tiles)
+                return false;
 
-        return off < mp->tile_size * p->n_tiles;
+        assert(off % mp->tile_size == 0);
+        return true;
 }
 
 static bool pool_is_unused(struct mempool *mp, struct pool *p) {