Skip to content
  • Rami Ylimaki's avatar
    os: Prevent core dump from being truncated. · 5b9a52be
    Rami Ylimaki authored and Keith Packard's avatar Keith Packard committed
    
    
    The problem fixed by this patch can be reproduced on Linux with the
    following steps.
    - Access NULL pointer intentionally in ProcessOtherEvent on key press.
    - Instead of saving core dump to a file, write it into a pipe.
      echo "|/usr/sbin/my-core-dumper" > /proc/sys/kernel/core_pattern
    - Dump the core by pressing a key.
    
    While the core is being dumped into the pipe, the smart schedule timer
    will cause a pending SIGALRM. Linux kernel stops writing data to the
    pipe when there are pending signals. This causes the core dump to be
    truncated. On my system I'm expecting a 6 MB dump but the size will be
    60 kB instead. The problem is solved if we block the SIGALRM caused by
    expired smart schedule timer.
    
    I haven't been able to reproduce this problem in the following cases.
    - Save core dump to a file instead of a pipe.
    - kill -SEGV `pidof Xorg`
    - Press a key to dump core while gdb is attached to Xorg.
    - Give option -dumbSched to Xorg.
    
    Also note that the fix works only when NoTrapSignals has the default
    value FALSE. The problem can still be reproduced if error signals
    aren't trapped. In addition to pending SIGALRM, there is a similar
    problem with pending SIGIO from the keyboard driver during core dump.
    
    Signed-off-by: default avatarRami Ylimaki <ext-rami.ylimaki@nokia.com>
    Reviewed-by: default avatarKeith Packard <keithp@keithp.com>
    Signed-off-by: default avatarKeith Packard <keithp@keithp.com>
    5b9a52be