smalloc: fix ptr address in redzone error message
authorVincent Fu <vincent.fu@samsung.com>
Tue, 5 Apr 2022 17:32:49 +0000 (17:32 +0000)
committerJens Axboe <axboe@kernel.dk>
Tue, 5 Apr 2022 17:47:35 +0000 (11:47 -0600)
sfree_check_redzone is passed a pointer to the address of the *header*
of an allocated block. This does not match the address of any of the
buffers returned by smalloc. Adjust the value printed out to refer to
the address returned by smalloc associated with the header in question.
This makes debugging easier because it allows us to more easily identify
the buffer where over-/under-run occurred.

Signed-off-by: Vincent Fu <vincent.fu@samsung.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
smalloc.c

index fa00f0ee3325b25fa6bdc5abe6c3bf405026a743..23243054ec7ab401ee7d89d73db81d3d809dd612 100644 (file)
--- a/smalloc.c
+++ b/smalloc.c
@@ -283,13 +283,13 @@ static void sfree_check_redzone(struct block_hdr *hdr)
        if (hdr->prered != SMALLOC_PRE_RED) {
                log_err("smalloc pre redzone destroyed!\n"
                        " ptr=%p, prered=%x, expected %x\n",
-                               hdr, hdr->prered, SMALLOC_PRE_RED);
+                               hdr+1, hdr->prered, SMALLOC_PRE_RED);
                assert(0);
        }
        if (*postred != SMALLOC_POST_RED) {
                log_err("smalloc post redzone destroyed!\n"
                        "  ptr=%p, postred=%x, expected %x\n",
-                               hdr, *postred, SMALLOC_POST_RED);
+                               hdr+1, *postred, SMALLOC_POST_RED);
                assert(0);
        }
 }