[Bug 553745]

James Hunt 553745 at bugs.launchpad.net
Tue Apr 17 09:38:51 UTC 2012


I think I've worked out what is going on here (and which caused me to
raise the erroneous bug 42285):

In ply_event_loop_process_pending_events(),
ply_event_loop_handle_timeouts() is being called *after* epoll_wait(),
but ply_event_loop_handle_timeouts() may free event sources.

I can reliabily force plymouthd to SIGSEGV (in various parts of the
code) by running the following:

  plymouth show-splash
  plymouth quit

I'm seeing epoll_wait() return with a single valid fd event.
ply_event_loop_handle_timeouts() then runs, and calls
main.c:on_boot_splash_idle(). This causes the event source object
referred to in the epoll_wait() event set to be freed and its reference
count set to zero. After ply_event_loop_handle_timeouts() finishes, the
now invalid source object pointed to by the epoll event data is
referenced (it now has a reference_count of 1), and the invalid event is
now processed with varying SIGSEGV scenarios ensuing.

Currently ply_event_loop_process_pending_events() can be summarized as:

1. get events.
2. handle timeouts.
3. reference event sources.
4. process events.
5. unreference event sources.

The attached patch changes this slightly to be effectively:

1. get events.
2. reference event sources.
3. handle timeouts.
4. process events.
5. unreference event sources.

-- 
You received this bug notification because you are a member of Ubuntu
Foundations Bugs, which is subscribed to plymouth in Ubuntu.
https://bugs.launchpad.net/bugs/553745

Title:
  plymouthd crashed with SIGSEGV in
  ply_event_loop_process_pending_events()

Status in The Plymouth splash screen:
  Confirmed
Status in “plymouth” package in Ubuntu:
  Fix Released
Status in “plymouth” source package in Lucid:
  Triaged
Status in “plymouth” source package in Maverick:
  Invalid
Status in “plymouth” source package in Natty:
  Fix Released
Status in “plymouth” source package in Oneiric:
  Incomplete
Status in “plymouth” source package in Precise:
  Fix Released

Bug description:
  Binary package hint: plymouth

  just upgraded to lucid, first reboot tried to start accounts

  ProblemType: Crash
  DistroRelease: Ubuntu 10.04
  Package: plymouth 0.8.1-4
  ProcVersionSignature: Ubuntu 2.6.32-19.28-generic 2.6.32.10+drm33.1
  Uname: Linux 2.6.32-19-generic i686
  NonfreeKernelModules: wl
  Architecture: i386
  Date: Thu Apr  1 22:14:11 2010
  DefaultPlymouth: /lib/plymouth/themes/kubuntu-logo/kubuntu-logo.plymouth
  ExecutablePath: /sbin/plymouthd
  MachineType: Dell Inc. Inspiron 1545
  ProcCmdLine: root=UUID=73530dc8-e3cc-4147-b801-4725b2f88141 ro quiet splash vga=792
  ProcCmdline: /sbin/plymouthd --mode=boot --attach-to-session
  ProcEnviron: PATH=(custom, no user)
  ProcFB: 0 inteldrmfb
  SegvAnalysis:
   Segfault happened at: 0xfb5fe1 <ply_event_loop_process_pending_events+513>: test   %eax,0x4(%esi)
   PC (0x00fb5fe1) ok
   source "%eax" ok
   destination "0x4(%esi)" (0x00000004) not located in a known VMA region (needed writable region)!
  SegvReason: writing NULL VMA
  Signal: 11
  SourcePackage: plymouth
  StacktraceTop:
   ply_event_loop_process_pending_events ()
   ply_event_loop_run () from /lib/libply.so.2
   ?? ()
   __libc_start_main () from /lib/tls/i686/cmov/libc.so.6
   ?? ()
  TextPlymouth: /lib/plymouth/themes/ubuntu-text/ubuntu-text.plymouth
  Title: plymouthd crashed with SIGSEGV in ply_event_loop_process_pending_events()
  UserGroups:
   
  dmi.bios.date: 07/17/2009
  dmi.bios.vendor: Dell Inc.
  dmi.bios.version: A10
  dmi.board.name: 0G848F
  dmi.board.vendor: Dell Inc.
  dmi.chassis.type: 8
  dmi.chassis.vendor: Dell Inc.
  dmi.modalias: dmi:bvnDellInc.:bvrA10:bd07/17/2009:svnDellInc.:pnInspiron1545:pvr:rvnDellInc.:rn0G848F:rvr:cvnDellInc.:ct8:cvr:
  dmi.product.name: Inspiron 1545
  dmi.sys.vendor: Dell Inc.

To manage notifications about this bug go to:
https://bugs.launchpad.net/plymouth/+bug/553745/+subscriptions




More information about the foundations-bugs mailing list