valgrind жалуется на gethostbyname из sockets

Ventalf

Здраствуйте,
Кто нибудь сталкивался с такой проблемой?
main.cpp

#include <netdb.h>

#include <sys/socket.h>
#include <string>
#include <iostream>

int main
{
hostent *server;
const char host[] = "localhost";
server = gethostbyname(host);
if(server == 0) {
std::cout << "Server is null\n";
}
return 0;
}

сначала

gcc-4.7.0/bin/g++ -m64 -std=c++11 -Wall -Werror -fPIC -Wextra -pedantic -g -ggdb -m64 main.cpp -o main

затем
valgrind --leak-check=full --smc-check=all --track-origins=yes main

==14889== Memcheck, a memory error detector
==14889== Copyright (C) 2002-2011, and GNU GPL'd, by Julian Seward et al.
==14889== Using Valgrind-3.7.0 and LibVEX; rerun with -h for copyright info
==14889== Command: main
==14889==
==14889== Syscall param socketcall.sendto(msg) points to uninitialised byte(s)
==14889== at 0x5096A54: send (in /lib64/tls/libc-2.3.4.so)
==14889== by 0x50C460C: get_mapping (in /lib64/tls/libc-2.3.4.so)
==14889== by 0x50C4B56: __nscd_get_map_ref (in /lib64/tls/libc-2.3.4.so)
==14889== by 0x50C339E: nscd_gethst_r (in /lib64/tls/libc-2.3.4.so)
==14889== by 0x50C3C0A: __nscd_gethostbyname_r (in /lib64/tls/libc-2.3.4.so)
==14889== by 0x50A9CAF: getho@GLIBC_2.2.5 (in /lib64/tls/libc-2.3.4.so)
==14889== by 0x50A966E: gethostbyname (in /lib64/tls/libc-2.3.4.so)
==14889== by 0x4008F3: main (main.cpp:12)
==14889== Address 0x7feffc4d2 is on thread 1's stack
==14889== Uninitialised value was created by a stack allocation
==14889== at 0x50C4472: get_mapping (in /lib64/tls/libc-2.3.4.so)
==14889==
==14889==
==14889== HEAP SUMMARY:
==14889== in use at exit: 0 bytes in 0 blocks
==14889== total heap usage: 3 allocs, 3 frees, 1,632 bytes allocated
==14889==
==14889== All heap blocks were freed -- no leaks are possible
==14889==
==14889== For counts of detected and suppressed errors, rerun with: -v
==14889== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 8 from 8)

Ventalf

Этот глюк проявляет себя на RedHat4
На локальном Debian Wheezy ничего подобного не наблюдается

vall

вероятно баг в древнем libc

ppplva

 {
glibc24-64bit-padding-1a
Memcheck:Param
socketcall.sendto(msg)
fun:send
fun:get_mapping
fun:__nscd_get_map_ref
fun:nscd*
}

Это есть в стандартных suppressions. Может валгринд древний, или как-то не так собран?

Anturag

Это либо баг в libc, либо false positive у valgrind, другого не дано. Первая гипотеза достаточно легко проверяется с помощью gdb.
Оставить комментарий
Имя или ник:
Комментарий: