Wireshark-dev: Re: [Wireshark-dev] tvb allocator (was: Re: [Wireshark-commits] master b6d20a2:
From: Bálint Réczey <balint@xxxxxxxxxxxxxxx>
Date: Thu, 24 Jul 2014 21:45:48 +0200
2014-07-24 20:48 GMT+02:00 Evan Huus <eapache@xxxxxxxxx>:
>
> On Thu, Jul 24, 2014 at 2:42 PM, Bálint Réczey <balint@xxxxxxxxxxxxxxx>
> wrote:
>>
>> Hi Jakub,
>>
>> 2014-07-22 0:52 GMT+02:00  <darkjames-ws@xxxxxxxxxxxx>:
>> > Hi,
>> >
>> > On Sat, Jul 12, 2014 at 02:27:06AM +0200, B??lint R??czey wrote:
>> >> I plan using ASAN for all programs which would catch (among others)
>> >> use-after-free and reading below or over the malloc()-ed
>> >> memory area. Those can't be caught if the program uses another layer
>> >> of bulk memory allocations.
>> >> g_malloc() and g_slice_* has the same problem, but they can be
>> >> overrideb by passing G_SLICE=always-malloc .
>> >
>> > We have these environment variables also, ver{3, 4} introduce
>> > WIRESHARK_DEBUG_WMEM_OBJECT_POOL_SKIP,
>> > where you can set, and object pool will not maintain free list of
>> > objects.
>> >
>> > I see no problem with enabling it by default when building with ASAN.
>> >
>> > Also it should be quite easy to use ASAN manual poisoning[1] with object
>> > pool API.
>> >
>> > wmem_object_pool_alloc(wmem_allocator_t *allocator, wmem_object_pool_t
>> > *pool):
>> >     if (pool->current_count > 0) {
>> >         ...
>> >         ASAN_UNPOISON_MEMORY_REGION(pool->free_list, pool->object_size);
>> >         pool->free_list = pool->free_list->next;
>> >
>> > wmem_object_pool_free(wmem_allocator_t *allocator, wmem_object_pool_t
>> > *pool, void *ptr)
>> >     ...
>> >     ASAN_POISON_MEMORY_REGION(ptr, pool->object_size);
>> >
>> > (not tested).
>> Thank you, I was not aware of those macros. I think we should add
>> those to the custom allocator code.
>
>
> Just setting WIRESHARK_DEBUG_WMEM_OVERRIDE=simple is easier, is it not?
I think it would worth testing the performance of both options, but
yes, using the simple allocator seems to be easier.