DF-5773 / run_storm_demo.sh
#!/bin/sh # DF-5773 mechanism harness driver (runs storm_demo, the faithful # extraction of init.c:204-230/500-506, with a bystander in the pgrp). # # Generation 1 child exits 32 after WINDOW seconds (cpu_reset analog) # -> monitor reforks -> generation 2 child INHERITS handle_term # -> TERM fired in its window -> kill(0, SIGTERM): # storm (self-re-arming) + group splash (bystander + this runner TERMed). # # EXPECTED (defect present): BYSTANDER_DEAD, RUNNER_GOT_SIGTERM, # demo alive at ~100% CPU, second TERM useless, kill -9 required. WINDOW=${1:-3} cd /root/poc5773 rm -f /tmp/storm.obs sleep 120 & BYSTANDER=$! trap 'echo RUNNER_GOT_SIGTERM >> /tmp/storm.obs' TERM ./storm_demo $WINDOW & DEMO=$! echo "demo=$DEMO bystander=$BYSTANDER window=$WINDOW" > /tmp/storm.obs # gen1 exits at ~WINDOW; gen2's window is another ~WINDOW sleep $(( WINDOW + WINDOW / 2 + 1 )) echo "FIRING TERM at gen2 window" >> /tmp/storm.obs kill -TERM $DEMO 2>/dev/null sleep 3 kill -0 $BYSTANDER 2>/dev/null && echo BYSTANDER_ALIVE >> /tmp/storm.obs || echo BYSTANDER_DEAD_BY_SPLASH >> /tmp/storm.obs kill -0 $DEMO 2>/dev/null && echo DEMO_ALIVE >> /tmp/storm.obs || echo DEMO_DEAD >> /tmp/storm.obs kill -TERM $DEMO 2>/dev/null sleep 2 kill -0 $DEMO 2>/dev/null && echo DEMO_STILL_ALIVE_AFTER_SECOND_TERM_storm_wedged >> /tmp/storm.obs || echo DEMO_DIED_SECOND_TERM >> /tmp/storm.obs ps -o pid,ppid,%cpu,state,comm | grep -E "storm|PID" | head -5 >> /tmp/storm.obs kill -9 $BYSTANDER $DEMO 2>/dev/null pkill -9 storm_demo 2>/dev/null cat /tmp/storm.obs |