Public bug reported:
Binary package hint: gdm
This causes the login process to hang indefinitely. Cancel does
nothing...
Here's what gets logged in /var/log/gdm/:0-slave.log:
*** glibc detected *** /usr/lib/gdm/gdm-simple-slave: double free or corruption
(fasttop): 0x09a61c88 ***
======= Backtrace: =========
/lib/tls/i686/cmov/libc.so.6[0x440ff1]
/lib/tls/i686/cmov/libc.so.6[0x4426f2]
/lib/tls/i686/cmov/libc.so.6(cfree+0x6d)[0x44579d]
/lib/libglib-2.0.so.0(g_free+0x36)[0xbd8196]
/usr/lib/gdm/gdm-simple-slave[0x8056ac5] get_session_command_for_file
/usr/lib/gdm/gdm-simple-slave[0x8056d23] get_fallback_session_name
/usr/lib/gdm/gdm-simple-slave[0x805851d] gdm_session_direct_defaults_changed
/usr/lib/gdm/gdm-simple-slave[0x8058709] gdm_session_direct_setup_for_user
/usr/lib/libgobject-2.0.so.0(g_cclosure_marshal_VOID__STRING+0x88)[0xa251c8]
/usr/lib/libgobject-2.0.so.0(g_closure_invoke+0x1b2)[0xa18072]
/usr/lib/libgobject-2.0.so.0[0xa2d7a8]
/usr/lib/libgobject-2.0.so.0(g_signal_emit_valist+0x7bd)[0xa2eb2d]
/usr/lib/libgobject-2.0.so.0(g_signal_emit+0x26)[0xa2efb6]
/usr/lib/gdm/gdm-simple-slave[0x804f44a] greeter_server_message_handler
/lib/libdbus-1.so.3[0x3b9f13]
/lib/libdbus-1.so.3(dbus_connection_dispatch+0x3cc)[0x3accec]
/usr/lib/libdbus-glib-1.so.2[0x60075d]
/lib/libglib-2.0.so.0(g_main_context_dispatch+0x1f8)[0xbcfe88]
/lib/libglib-2.0.so.0[0xbd3730]
/lib/libglib-2.0.so.0(g_main_loop_run+0x1bf)[0xbd3b9f]
/usr/lib/gdm/gdm-simple-slave[0x804dbc6]
/lib/tls/i686/cmov/libc.so.6(__libc_start_main+0xe6)[0x3ecb56]
/usr/lib/gdm/gdm-simple-slave[0x804d7e1]
I have added the decoded symbol names from the ddeb. From this you can
see that get_session_command_for_file likely causes the double free.
Looking at that code I noticed this:
static gboolean
get_session_command_for_file (const char *file,
char **command)
{
GKeyFile *key_file;
GError *error;
char *full_path;
char *exec;
gboolean ret;
gboolean res;
exec = NULL;
...
exec = g_key_file_get_string (key_file,
G_KEY_FILE_DESKTOP_GROUP,
G_KEY_FILE_DESKTOP_KEY_TRY_EXEC,
NULL);
if (exec != NULL) {
res = is_prog_in_path (exec);
g_free (exec);
if (! res) {
g_debug ("GdmSessionDirect: Command not found: %s",
G_KEY_FILE_DESKTOP_KEY_TRY_EXEC);
goto out;
}
}
...
out:
g_free (exec);
return ret;
}
So exec gets g_free'd twice if there is a TryExec key and is_prog_in_path fails.
** Affects: gdm (Ubuntu)
Importance: Undecided
Status: New
--
double free in gdm-simple-slave on login
https://bugs.launchpad.net/bugs/505051
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
--
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs