panic.c 11.3 KB
Newer Older
L
Linus Torvalds 已提交
1 2 3 4 5 6 7 8 9 10
/*
 *  linux/kernel/panic.c
 *
 *  Copyright (C) 1991, 1992  Linus Torvalds
 */

/*
 * This function is used through-out the kernel (including mm and fs)
 * to indicate a major problem.
 */
I
Ingo Molnar 已提交
11 12
#include <linux/debug_locks.h>
#include <linux/interrupt.h>
13
#include <linux/kmsg_dump.h>
I
Ingo Molnar 已提交
14 15
#include <linux/kallsyms.h>
#include <linux/notifier.h>
L
Linus Torvalds 已提交
16
#include <linux/module.h>
I
Ingo Molnar 已提交
17
#include <linux/random.h>
18
#include <linux/ftrace.h>
L
Linus Torvalds 已提交
19
#include <linux/reboot.h>
I
Ingo Molnar 已提交
20 21 22
#include <linux/delay.h>
#include <linux/kexec.h>
#include <linux/sched.h>
L
Linus Torvalds 已提交
23
#include <linux/sysrq.h>
I
Ingo Molnar 已提交
24
#include <linux/init.h>
L
Linus Torvalds 已提交
25 26
#include <linux/nmi.h>

27 28 29
#define PANIC_TIMER_STEP 100
#define PANIC_BLINK_SPD 18

30
int panic_on_oops = CONFIG_PANIC_ON_OOPS_VALUE;
A
Andi Kleen 已提交
31
static unsigned long tainted_mask;
32 33 34
static int pause_on_oops;
static int pause_on_oops_flag;
static DEFINE_SPINLOCK(pause_on_oops_lock);
L
Linus Torvalds 已提交
35

36
int panic_timeout = CONFIG_PANIC_TIMEOUT;
37
EXPORT_SYMBOL_GPL(panic_timeout);
L
Linus Torvalds 已提交
38

39
ATOMIC_NOTIFIER_HEAD(panic_notifier_list);
L
Linus Torvalds 已提交
40 41 42

EXPORT_SYMBOL(panic_notifier_list);

43
static long no_blink(int state)
44
{
45
	return 0;
46 47
}

48 49 50 51
/* Returns how long it waited in ms */
long (*panic_blink)(int state);
EXPORT_SYMBOL(panic_blink);

52 53 54 55 56 57 58 59 60
/*
 * Stop ourself in panic -- architecture code may override this
 */
void __weak panic_smp_self_stop(void)
{
	while (1)
		cpu_relax();
}

L
Linus Torvalds 已提交
61 62 63 64 65 66 67 68
/**
 *	panic - halt the system
 *	@fmt: The text string to print
 *
 *	Display a message, then perform cleanups.
 *
 *	This function never returns.
 */
69
void panic(const char *fmt, ...)
L
Linus Torvalds 已提交
70
{
71
	static DEFINE_SPINLOCK(panic_lock);
L
Linus Torvalds 已提交
72 73
	static char buf[1024];
	va_list args;
74 75
	long i, i_next = 0;
	int state = 0;
L
Linus Torvalds 已提交
76

77 78 79 80 81 82 83 84
	/*
	 * Disable local interrupts. This will prevent panic_smp_self_stop
	 * from deadlocking the first cpu that invokes the panic, since
	 * there is nothing to prevent an interrupt handler (that runs
	 * after the panic_lock is acquired) from invoking panic again.
	 */
	local_irq_disable();

85
	/*
I
Ingo Molnar 已提交
86 87
	 * It's possible to come here directly from a panic-assertion and
	 * not have preempt disabled. Some functions called from here want
88
	 * preempt to be disabled. No point enabling it later though...
89 90 91 92 93
	 *
	 * Only one CPU is allowed to execute the panic code from here. For
	 * multiple parallel invocations of panic, all other CPUs either
	 * stop themself or will wait until they are stopped by the 1st CPU
	 * with smp_send_stop().
94
	 */
95 96
	if (!spin_trylock(&panic_lock))
		panic_smp_self_stop();
97

98
	console_verbose();
L
Linus Torvalds 已提交
99 100 101 102
	bust_spinlocks(1);
	va_start(args, fmt);
	vsnprintf(buf, sizeof(buf), fmt, args);
	va_end(args);
103
	pr_emerg("Kernel panic - not syncing: %s\n", buf);
104
#ifdef CONFIG_DEBUG_BUGVERBOSE
105 106 107
	/*
	 * Avoid nested stack-dumping if a panic occurs during oops processing
	 */
108
	if (!test_taint(TAINT_DIE) && oops_in_progress <= 1)
109
		dump_stack();
110
#endif
L
Linus Torvalds 已提交
111

112 113 114 115 116
	/*
	 * If we have crashed and we have a crash kernel loaded let it handle
	 * everything else.
	 * Do we want to call this before we try to display a message?
	 */
117
	crash_kexec(NULL);
118 119 120 121 122 123

	/*
	 * Note smp_send_stop is the usual smp shutdown function, which
	 * unfortunately means it may not be hardened to work in a panic
	 * situation.
	 */
L
Linus Torvalds 已提交
124 125
	smp_send_stop();

126 127 128 129
	/*
	 * Run any panic handlers, including those that might need to
	 * add information to the kmsg dump output.
	 */
130
	atomic_notifier_call_chain(&panic_notifier_list, 0, buf);
L
Linus Torvalds 已提交
131

132 133
	kmsg_dump(KMSG_DUMP_PANIC);

134 135
	bust_spinlocks(0);

136 137 138
	if (!panic_blink)
		panic_blink = no_blink;

139
	if (panic_timeout > 0) {
L
Linus Torvalds 已提交
140
		/*
I
Ingo Molnar 已提交
141 142 143
		 * Delay timeout seconds before rebooting the machine.
		 * We can't use the "normal" timers since we just panicked.
		 */
144
		pr_emerg("Rebooting in %d seconds..", panic_timeout);
I
Ingo Molnar 已提交
145

146
		for (i = 0; i < panic_timeout * 1000; i += PANIC_TIMER_STEP) {
L
Linus Torvalds 已提交
147
			touch_nmi_watchdog();
148 149 150 151 152
			if (i >= i_next) {
				i += panic_blink(state ^= 1);
				i_next = i + 3600 / PANIC_BLINK_SPD;
			}
			mdelay(PANIC_TIMER_STEP);
L
Linus Torvalds 已提交
153
		}
154 155
	}
	if (panic_timeout != 0) {
I
Ingo Molnar 已提交
156 157 158 159
		/*
		 * This will not be a clean reboot, with everything
		 * shutting down.  But if there is a chance of
		 * rebooting the system it will be rebooted.
L
Linus Torvalds 已提交
160
		 */
161
		emergency_restart();
L
Linus Torvalds 已提交
162 163 164 165
	}
#ifdef __sparc__
	{
		extern int stop_a_enabled;
166
		/* Make sure the user can actually press Stop-A (L1-A) */
L
Linus Torvalds 已提交
167
		stop_a_enabled = 1;
168
		pr_emerg("Press Stop-A (L1-A) to return to the boot prom\n");
L
Linus Torvalds 已提交
169 170
	}
#endif
171
#if defined(CONFIG_S390)
I
Ingo Molnar 已提交
172 173 174 175 176 177
	{
		unsigned long caller;

		caller = (unsigned long)__builtin_return_address(0);
		disabled_wait(caller);
	}
L
Linus Torvalds 已提交
178
#endif
179
	pr_emerg("---[ end Kernel panic - not syncing: %s\n", buf);
L
Linus Torvalds 已提交
180
	local_irq_enable();
181
	for (i = 0; ; i += PANIC_TIMER_STEP) {
182
		touch_softlockup_watchdog();
183 184 185 186 187
		if (i >= i_next) {
			i += panic_blink(state ^= 1);
			i_next = i + 3600 / PANIC_BLINK_SPD;
		}
		mdelay(PANIC_TIMER_STEP);
L
Linus Torvalds 已提交
188 189 190 191 192
	}
}

EXPORT_SYMBOL(panic);

D
Daniel Walker 已提交
193

A
Andi Kleen 已提交
194
struct tnt {
I
Ingo Molnar 已提交
195 196 197
	u8	bit;
	char	true;
	char	false;
A
Andi Kleen 已提交
198 199 200
};

static const struct tnt tnts[] = {
I
Ingo Molnar 已提交
201 202
	{ TAINT_PROPRIETARY_MODULE,	'P', 'G' },
	{ TAINT_FORCED_MODULE,		'F', ' ' },
203
	{ TAINT_CPU_OUT_OF_SPEC,	'S', ' ' },
I
Ingo Molnar 已提交
204 205 206 207 208 209 210 211
	{ TAINT_FORCED_RMMOD,		'R', ' ' },
	{ TAINT_MACHINE_CHECK,		'M', ' ' },
	{ TAINT_BAD_PAGE,		'B', ' ' },
	{ TAINT_USER,			'U', ' ' },
	{ TAINT_DIE,			'D', ' ' },
	{ TAINT_OVERRIDDEN_ACPI_TABLE,	'A', ' ' },
	{ TAINT_WARN,			'W', ' ' },
	{ TAINT_CRAP,			'C', ' ' },
212
	{ TAINT_FIRMWARE_WORKAROUND,	'I', ' ' },
213
	{ TAINT_OOT_MODULE,		'O', ' ' },
214
	{ TAINT_UNSIGNED_MODULE,	'E', ' ' },
A
Andi Kleen 已提交
215 216
};

L
Linus Torvalds 已提交
217 218 219 220 221 222 223
/**
 *	print_tainted - return a string to represent the kernel taint state.
 *
 *  'P' - Proprietary module has been loaded.
 *  'F' - Module has been forcibly loaded.
 *  'S' - SMP with CPUs not designed for SMP.
 *  'R' - User forced a module unload.
224
 *  'M' - System experienced a machine check exception.
L
Linus Torvalds 已提交
225
 *  'B' - System has hit bad_page.
226
 *  'U' - Userspace-defined naughtiness.
A
Arjan van de Ven 已提交
227
 *  'D' - Kernel has oopsed before
228 229
 *  'A' - ACPI table overridden.
 *  'W' - Taint on warning.
230
 *  'C' - modules from drivers/staging are loaded.
231
 *  'I' - Working around severe firmware bug.
232
 *  'O' - Out-of-tree module has been loaded.
233
 *  'E' - Unsigned module has been loaded.
L
Linus Torvalds 已提交
234
 *
235
 *	The string is overwritten by the next call to print_tainted().
L
Linus Torvalds 已提交
236 237 238
 */
const char *print_tainted(void)
{
239
	static char buf[ARRAY_SIZE(tnts) + sizeof("Tainted: ")];
A
Andi Kleen 已提交
240 241 242 243 244 245 246 247 248 249 250 251 252

	if (tainted_mask) {
		char *s;
		int i;

		s = buf + sprintf(buf, "Tainted: ");
		for (i = 0; i < ARRAY_SIZE(tnts); i++) {
			const struct tnt *t = &tnts[i];
			*s++ = test_bit(t->bit, &tainted_mask) ?
					t->true : t->false;
		}
		*s = 0;
	} else
L
Linus Torvalds 已提交
253
		snprintf(buf, sizeof(buf), "Not tainted");
I
Ingo Molnar 已提交
254 255

	return buf;
L
Linus Torvalds 已提交
256 257
}

A
Andi Kleen 已提交
258
int test_taint(unsigned flag)
L
Linus Torvalds 已提交
259
{
A
Andi Kleen 已提交
260 261 262 263 264 265 266
	return test_bit(flag, &tainted_mask);
}
EXPORT_SYMBOL(test_taint);

unsigned long get_taint(void)
{
	return tainted_mask;
L
Linus Torvalds 已提交
267
}
268

269 270 271 272 273 274 275 276 277
/**
 * add_taint: add a taint flag if not already set.
 * @flag: one of the TAINT_* constants.
 * @lockdep_ok: whether lock debugging is still OK.
 *
 * If something bad has gone wrong, you'll want @lockdebug_ok = false, but for
 * some notewortht-but-not-corrupting cases, it can be set to true.
 */
void add_taint(unsigned flag, enum lockdep_ok lockdep_ok)
278
{
279
	if (lockdep_ok == LOCKDEP_NOW_UNRELIABLE && __debug_locks_off())
280
		pr_warn("Disabling lock debugging due to kernel taint\n");
281

A
Andi Kleen 已提交
282
	set_bit(flag, &tainted_mask);
283
}
L
Linus Torvalds 已提交
284
EXPORT_SYMBOL(add_taint);
285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335

static void spin_msec(int msecs)
{
	int i;

	for (i = 0; i < msecs; i++) {
		touch_nmi_watchdog();
		mdelay(1);
	}
}

/*
 * It just happens that oops_enter() and oops_exit() are identically
 * implemented...
 */
static void do_oops_enter_exit(void)
{
	unsigned long flags;
	static int spin_counter;

	if (!pause_on_oops)
		return;

	spin_lock_irqsave(&pause_on_oops_lock, flags);
	if (pause_on_oops_flag == 0) {
		/* This CPU may now print the oops message */
		pause_on_oops_flag = 1;
	} else {
		/* We need to stall this CPU */
		if (!spin_counter) {
			/* This CPU gets to do the counting */
			spin_counter = pause_on_oops;
			do {
				spin_unlock(&pause_on_oops_lock);
				spin_msec(MSEC_PER_SEC);
				spin_lock(&pause_on_oops_lock);
			} while (--spin_counter);
			pause_on_oops_flag = 0;
		} else {
			/* This CPU waits for a different one */
			while (spin_counter) {
				spin_unlock(&pause_on_oops_lock);
				spin_msec(1);
				spin_lock(&pause_on_oops_lock);
			}
		}
	}
	spin_unlock_irqrestore(&pause_on_oops_lock, flags);
}

/*
I
Ingo Molnar 已提交
336 337
 * Return true if the calling CPU is allowed to print oops-related info.
 * This is a bit racy..
338 339 340 341 342 343 344 345
 */
int oops_may_print(void)
{
	return pause_on_oops_flag == 0;
}

/*
 * Called when the architecture enters its oops handler, before it prints
I
Ingo Molnar 已提交
346 347
 * anything.  If this is the first CPU to oops, and it's oopsing the first
 * time then let it proceed.
348
 *
I
Ingo Molnar 已提交
349 350 351 352
 * This is all enabled by the pause_on_oops kernel boot option.  We do all
 * this to ensure that oopses don't scroll off the screen.  It has the
 * side-effect of preventing later-oopsing CPUs from mucking up the display,
 * too.
353
 *
I
Ingo Molnar 已提交
354 355 356
 * It turns out that the CPU which is allowed to print ends up pausing for
 * the right duration, whereas all the other CPUs pause for twice as long:
 * once in oops_enter(), once in oops_exit().
357 358 359
 */
void oops_enter(void)
{
360
	tracing_off();
I
Ingo Molnar 已提交
361 362
	/* can't trust the integrity of the kernel anymore: */
	debug_locks_off();
363 364 365
	do_oops_enter_exit();
}

A
Arjan van de Ven 已提交
366 367 368 369 370 371 372 373 374
/*
 * 64-bit random ID for oopses:
 */
static u64 oops_id;

static int init_oops_id(void)
{
	if (!oops_id)
		get_random_bytes(&oops_id, sizeof(oops_id));
375 376
	else
		oops_id++;
A
Arjan van de Ven 已提交
377 378 379 380 381

	return 0;
}
late_initcall(init_oops_id);

382
void print_oops_end_marker(void)
383 384
{
	init_oops_id();
385
	pr_warn("---[ end trace %016llx ]---\n", (unsigned long long)oops_id);
386 387
}

388 389 390 391 392 393 394
/*
 * Called when the architecture exits its oops handler, after printing
 * everything.
 */
void oops_exit(void)
{
	do_oops_enter_exit();
395
	print_oops_end_marker();
396
	kmsg_dump(KMSG_DUMP_OOPS);
397
}
398

399
#ifdef WANT_WARN_ON_SLOWPATH
400 401
struct slowpath_args {
	const char *fmt;
402
	va_list args;
403
};
404

405 406
static void warn_slowpath_common(const char *file, int line, void *caller,
				 unsigned taint, struct slowpath_args *args)
407
{
408 409
	disable_trace_on_warning();

410 411 412
	pr_warn("------------[ cut here ]------------\n");
	pr_warn("WARNING: CPU: %d PID: %d at %s:%d %pS()\n",
		raw_smp_processor_id(), current->pid, file, line, caller);
413

414 415
	if (args)
		vprintk(args->fmt, args->args);
416 417 418 419

	print_modules();
	dump_stack();
	print_oops_end_marker();
420 421
	/* Just a warning, don't kill lockdep. */
	add_taint(taint, LOCKDEP_STILL_OK);
422
}
423 424 425 426 427 428 429

void warn_slowpath_fmt(const char *file, int line, const char *fmt, ...)
{
	struct slowpath_args args;

	args.fmt = fmt;
	va_start(args.args, fmt);
430 431
	warn_slowpath_common(file, line, __builtin_return_address(0),
			     TAINT_WARN, &args);
432 433
	va_end(args.args);
}
434 435
EXPORT_SYMBOL(warn_slowpath_fmt);

436 437 438 439 440 441 442 443 444 445 446 447 448
void warn_slowpath_fmt_taint(const char *file, int line,
			     unsigned taint, const char *fmt, ...)
{
	struct slowpath_args args;

	args.fmt = fmt;
	va_start(args.args, fmt);
	warn_slowpath_common(file, line, __builtin_return_address(0),
			     taint, &args);
	va_end(args.args);
}
EXPORT_SYMBOL(warn_slowpath_fmt_taint);

449 450
void warn_slowpath_null(const char *file, int line)
{
451 452
	warn_slowpath_common(file, line, __builtin_return_address(0),
			     TAINT_WARN, NULL);
453 454
}
EXPORT_SYMBOL(warn_slowpath_null);
455 456
#endif

457
#ifdef CONFIG_CC_STACKPROTECTOR
458

459 460 461 462
/*
 * Called when gcc's -fstack-protector feature is used, and
 * gcc detects corruption of the on-stack canary value
 */
463
__visible void __stack_chk_fail(void)
464
{
465 466
	panic("stack-protector: Kernel stack is corrupted in: %p\n",
		__builtin_return_address(0));
467 468
}
EXPORT_SYMBOL(__stack_chk_fail);
469

470
#endif
471 472 473

core_param(panic, panic_timeout, int, 0644);
core_param(pause_on_oops, pause_on_oops, int, 0644);
474 475 476 477 478 479 480 481 482 483

static int __init oops_setup(char *s)
{
	if (!s)
		return -EINVAL;
	if (!strcmp(s, "panic"))
		panic_on_oops = 1;
	return 0;
}
early_param("oops", oops_setup);