Using drbdadm with environment variable MALLOC_CHECK_ set to not zero result in 
segmentation fault.

Reason is the handling of most free operations in drbdadm_main.c, notably in 
functions free_config, free_host_info and maybe some other more.

Example: function free_host_info
        for_each_volume(vol, hi->volumes)
                free_volume(vol);

Function free_volume call as last libc function free(vol), which instructs libc 
in case of MALLOC_CHECK_ not zero to initialize memory with 0xcc. The macro 
for_each_volume take vol->next (which is now 0xcccccccc) as next vol and calls 
free_volume again which try to free the memory and this cause the segmentation 
fault.

Example of correct behaviour is function free_options, which temporary stores 
the next element before freeing it.

There is currently no race condition in free before next, because this part is 
not multi threaded.

Questions:
Is there a specific reason for doing that (DRBD 8.3.11 works fine with 
MALLOC_CHECK_) in DRBD 8.4.1 ?
Is it planned or a bug ?
Patch ?

Rainer

_______________________________________________
drbd-user mailing list
[email protected]
http://lists.linbit.com/mailman/listinfo/drbd-user

Reply via email to