Comment 35 for bug 388873

Revision history for this message
In , Slawomir (slawomir-redhat-bugs) wrote :

Description of problem:
After changing date to previous day and using stop/start commands to restart some upstart jobs I get a segfault in init task. Below is the backtrace from gdb. I can reproduce this pretty much 100% of the time and the backtrace looks always the same (only some pointer values are different).

Version-Release number of selected component (if applicable):

upstart-0.3.9-22.fc9.i386

How reproducible:

100%

Steps to Reproduce:
1. Change date to previous day
2. stop <upstart jobs>
3. emit event which will trigger starting of <upstart jobs>

Actual results:
Message from syslogd@sonostation-usb26-eth at Mar 27 10:52:22 ...
 kernel:init[1]: segfault at c1 ip 08057d32 sp bf83b980 error 4 in init[8048000+20000]

Expected results:
No segfault, tasks started.

Additional info:

(gdb) bt full
#0 0x00a9b416 in __kernel_vsyscall ()
No symbol table info available.
#1 0x00c318ff in sigprocmask () from /lib/libc.so.6
No symbol table info available.
#2 0x0804a4d5 in crash_handler (signum=11) at main.c:400
 act = {__sigaction_handler = {sa_handler = 0, sa_sigaction = 0}, sa_mask = {__val = {0 <repeats 32 times>}}, sa_flags = 0, sa_restorer = 0x4}
 limit = {rlim_cur = 4294967295, rlim_max = 4294967295}
 mask = {__val = {2147482623, 4294967294, 4294967295 <repeats 30 times>}}
 err = <value optimized out>
 loglevel = <value optimized out>
 mask = {__val = {0, 0, 11121686, 115, 582, 3217000600, 123, 0, 0, 0, 3087986688, 15, 3087987304, 128, 1211428, 1748533395, 54641668, 3, 12627208, 13109375, 142491099, 142490795, 0,
    0, 1, 1797, 3087987408, 3087986688, 134515571, 12663656, 13521706, 0}}
 oldmask = {__val = {14, 4294967295, 0, 12611584, 134618112, 3217001336, 3217001336, 4, 13455331, 2, 134598413, 4, 134615746, 1, 11121664, 17, 51, 3217000744, 11121664, 17, 51,
    3228041216, 123, 123, 14073844, 8, 3217000744, 3217000600, 2, 0, 3217000780, 0}}
 __FUNCTION__ = "crash_handler"
#3 <signal handler called>
No symbol table info available.
#4 nih_str_array_append (array=0xbfbf8a48, parent=0x0, len=0xbfbf8a44, args=0x41) at string.c:534
 c_len = 5
 o_len = <value optimized out>
 arg = (char * const *) 0x5
 __FUNCTION__ = "nih_str_array_append"
#5 0x0804bc61 in job_run_process (job=0x87e7f30, process=PROCESS_MAIN) at job.c:1368
 statbuf = {st_dev = 59308975770263300, __pad1 = 61930, st_ino = 134616700, st_mode = 11, st_nlink = 0, st_uid = 13894081, st_gid = 142479368, st_rdev = 21617315872, __pad2 = 35248,
  st_size = -1077966368, st_blksize = 0, st_blocks = 13808947, st_atim = {tv_sec = 13890026, tv_nsec = 134616700}, st_mtim = {tv_sec = 11, tv_nsec = 14073844}, st_ctim = {
    tv_sec = 142508104, tv_nsec = 142507824}, __unused4 = 3217001048, __unused5 = 12760163}
 proc = (JobProcess *) 0x87e8560
 argv = (char **) 0x887cea8
 script = <value optimized out>
 argc = 5
 error = <value optimized out>
 fds = {142479392, 134616700}
 __FUNCTION__ = "job_run_process"
#6 0x0804c53c in job_change_state (job=0x87e7f30, state=JOB_SPAWNED) at job.c:856
 old_state = <value optimized out>
 __FUNCTION__ = "job_change_state"
#7 0x0804cff2 in job_child_reaper (data=0x0, pid=6764, killed=0, status=0) at job.c:1729
 job = <value optimized out>
 process = PROCESS_PRE_START
 failed = 0
 stop = 0
 state = 1
 __FUNCTION__ = "job_child_reaper"
#8 0x0805959e in nih_child_poll () at child.c:158
 iter = (NihList *) 0x87e1600
 _iter = (NihList *) 0x87e15d0
 pid = 6764
 killed = 0
 status = 0
 info = {si_signo = 17, si_errno = 0, si_code = 1, _sifields = {_pad = {6764, 0 <repeats 28 times>}, _kill = {si_pid = 6764, si_uid = 0}, _timer = {si_tid = 6764, si_overrun = 0,
      si_sigval = {sival_int = 0, sival_ptr = 0x0}}, _rt = {si_pid = 6764, si_uid = 0, si_sigval = {sival_int = 0, sival_ptr = 0x0}}, _sigchld = {si_pid = 6764, si_uid = 0, si_status = 0,
      si_utime = 0, si_stime = 0}, _sigfault = {si_addr = 0x1a6c}, _sigpoll = {si_band = 6764, si_fd = 0}}}
#9 0x0805d09d in nih_main_loop () at main.c:606
 timeout = {tv_sec = 4, tv_usec = 992000}
---Type <return> to continue, or q <return> to quit---
 readfds = {fds_bits = {8, 0 <repeats 31 times>}}
 writefds = {fds_bits = {32, 0 <repeats 31 times>}}
 buf = ""
 ret = <value optimized out>
 next_timer = (NihTimer *) 0x0
 exceptfds = {fds_bits = {0 <repeats 32 times>}}
 nfds = 7
#10 0x08049e42 in main (argc=5, argv=0x887cea8) at main.c:302
 args = <value optimized out>
 ret = 5