os: don't ignore failure from dladdr

If dladdr returns 0, don't go and use the returned Dl_info, it may
contain garbage.

X.Org bug#44315 <https://bugs.freedesktop.org/show_bug.cgi?id=44315>

Reported-and-tested-by: Cyril Brulebois <kibi@debian.org>
Reviewed-by: Jeremy Huddleston <jeremyhu@apple.com>
Reviewed-by: Cyril Brulebois <kibi@debian.org>
Signed-off-by: Julien Cristau <jcristau@debian.org>
This commit is contained in:
Julien Cristau 2011-12-30 20:41:25 +01:00 committed by Cyril Brulebois
parent 644efb43e0
commit 6269977c91

View File

@ -46,7 +46,11 @@ void xorg_backtrace(void)
ErrorF("\nBacktrace:\n"); ErrorF("\nBacktrace:\n");
size = backtrace(array, 64); size = backtrace(array, 64);
for (i = 0; i < size; i++) { for (i = 0; i < size; i++) {
dladdr(array[i], &info); int rc = dladdr(array[i], &info);
if (rc == 0) {
ErrorF("%d: ?? [%p]\n", i, array[i]);
continue;
}
mod = (info.dli_fname && *info.dli_fname) ? info.dli_fname : "(vdso)"; mod = (info.dli_fname && *info.dli_fname) ? info.dli_fname : "(vdso)";
if (info.dli_saddr) if (info.dli_saddr)
ErrorF("%d: %s (%s+0x%lx) [%p]\n", i, mod, ErrorF("%d: %s (%s+0x%lx) [%p]\n", i, mod,