Wireshark mailing list archives

Re: Checking address in WMEM


From: Dario Lombardo <dario.lombardo.ml () gmail com>
Date: Thu, 26 Jan 2017 10:06:16 +0100

On Wed, Jan 25, 2017 at 6:50 PM, Evan Huus <eapache () gmail com> wrote:

On my phone, but the short version is that there's no way to check this,
and no efficient way to build it.

Evan


Looking into the code it seems to me that the routine of free_all should
traverse all the allocated memory. I've written a code that mimics it, but
I'm still failing to have all the addresses for some type conversions.
That's the code I'm working on

// Check if 'address' belongs to the given scope.
gboolean
wmem_check_allocator_block(wmem_allocator_t* allocator, void* address)
{
    wmem_block_allocator_t *private_allocator =
(wmem_block_allocator_t*)allocator->private_data;
    wmem_block_hdr_t       *cur;
    wmem_block_chunk_t     *chunk;
    void* a = WMEM_DATA_TO_CHUNK(address);

    cur = private_allocator->block_list;

    while (cur) {
        chunk = WMEM_BLOCK_TO_CHUNK(cur);
        if (a == chunk)
            return TRUE;
        cur = cur->next;
    }
    return FALSE;
}

If I allocate a block and the allocator gives me 7c40 as address, the
function checks only 7c30. It looks like I'm casting/converting the
addresses the wrong way.
Any idea? Does this approach sound good, or am I completely following the
wrong path?

Thanks anyway.
Dario.
___________________________________________________________________________
Sent via:    Wireshark-dev mailing list <wireshark-dev () wireshark org>
Archives:    https://www.wireshark.org/lists/wireshark-dev
Unsubscribe: https://www.wireshark.org/mailman/options/wireshark-dev
             mailto:wireshark-dev-request () wireshark org?subject=unsubscribe

Current thread: