From 3a867c9ba4f41dad6c67a1a08792b358f328c54b Mon Sep 17 00:00:00 2001 From: Leah Neukirchen Date: Sun, 21 Jan 2018 16:26:30 +0100 Subject: add -D to generate a process in uninterruptible sleep --- fail.1 | 9 ++++++++- fail.c | 13 ++++++++++++- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/fail.1 b/fail.1 index c5af510..d63ea57 100644 --- a/fail.1 +++ b/fail.1 @@ -6,7 +6,7 @@ .Nd crash in various possible ways .Sh SYNOPSIS .Nm -.Op Fl 123Oacdikrst +.Op Fl 123DOacdikrst .Sh DESCRIPTION .Nm crashes in various possible ways to @@ -27,6 +27,13 @@ Return with exit status -1. Return with exit status 2. .It Fl 3 Return with exit status 111. +.It Fl D +Create a process that is in uninterruptible sleep (state D) and +print its pid. +(This uses +.Xr vfork 2 +and +.Xr pause 2 . ) .It Fl O Allocate memory in an infinite loop, to trigger an out of memory situation. diff --git a/fail.c b/fail.c index f586ba8..6e986ee 100644 --- a/fail.c +++ b/fail.c @@ -10,6 +10,7 @@ #include #include +#include #include #include @@ -34,6 +35,15 @@ dlcrash() *nullp = 1337; } +void +uninterruptible() +{ + printf("pid %d is now in state D\n", getpid()); + vfork(); + pause(); + exit(1); +} + // can lockup your machine void oom() @@ -122,11 +132,12 @@ main(int argc, char *argv[]) { int c; - while ((c = getopt(argc, argv, "123Oacdikrst")) != -1) { + while ((c = getopt(argc, argv, "123DOacdikrst")) != -1) { switch (c) { case '1': exit(-1); break; case '2': exit(2); break; case '3': exit(111); break; + case 'D': uninterruptible(); break; case 'O': oom(); break; case 'a': abortme(); break; case 'c': violate_seccomp(); break; -- cgit 1.4.1