Package: plymouth Version: 0.9.0-9 Severity: normal Dear Maintainer,
It is possible that plymouth identifies a device with no associated terminal (for example, an overlay framebuffer). However plymouth version 0.9.0-9 does not bother to check if a terminal is associated and ends up dereferencing a NULL pointer and crashing. Attached is a fix for this particular problem. It is essentially commit 84eb4381db85877a9a56b35994e6c10d43e46ebe from the plymouth git repository. I only modified it to match the coding style of 0.9.0-9 so it can apply cleanly. This fix is already available upstream in version 0.9.2, which is the version currently in Debian/stretch. So this particular problem is related only to Debian/jessie. John Ogness -- System Information: Debian Release: 8.5 APT prefers stable-updates APT policy: (500, 'stable-updates'), (500, 'stable') Architecture: armhf (armv7l) Kernel: Linux 3.14.52-elbe (SMP w/2 CPU cores; PREEMPT) Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8) Shell: /bin/sh linked to /bin/dash Init: systemd (via /run/systemd/system)
From: Ray Strode <[email protected]> Date: Mon, 14 Jul 2014 08:04:54 -0400 Subject: [PATCH] seat: be a little more forgiving in the case there's no open terminal We can end up in a situation where a seat object doesn't have a terminal associated with it. In that case we shouldn't crash, but continue on with no input available for that seat. https://bugs.freedesktop.org/show_bug.cgi?id=80553 --- src/libply-splash-core/ply-seat.c | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/src/libply-splash-core/ply-seat.c b/src/libply-splash-core/ply-seat.c index 2ac8bf7..cd7e5bc 100644 --- a/src/libply-splash-core/ply-seat.c +++ b/src/libply-splash-core/ply-seat.c @@ -154,14 +154,29 @@ ply_seat_open (ply_seat_t *seat, add_pixel_displays (seat); } - else + else if (seat->terminal != NULL) { seat->keyboard = ply_keyboard_new_for_terminal (seat->terminal); } - add_text_displays (seat); - ply_keyboard_watch_for_input (seat->keyboard); - seat->keyboard_active = true; + if (seat->terminal != NULL) + { + add_text_displays (seat); + } + else + { + ply_trace ("not adding text display for seat, since seat has no associated terminal"); + } + + if (seat->keyboard != NULL) + { + ply_keyboard_watch_for_input (seat->keyboard); + seat->keyboard_active = true; + } + else + { + ply_trace ("not watching seat for input"); + } return true; } -- 2.1.4

