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

Reply via email to