Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9f15c826 authored by Matthew Wilcox's avatar Matthew Wilcox Committed by Kyle McMartin
Browse files

[PARISC] Fix show_stack() when we can't kmalloc



show_stack() was calling kzalloc() to allocate a struct pt_regs.
This meant that *really* early stack dumps would cause a null pointer
dereference.  x86_64 allocates its pt_regs on the stack, so do the same.

Kyle actually committed this exact patch to CVS on
Wed Jul 26 14:32:39 2006 UTC, and never moved it across to git.
Bad Kyle.

Signed-off-by: default avatarMatthew Wilcox <matthew@wil.cx>
Signed-off-by: default avatarKyle McMartin <kyle@parisc-linux.org>
parent e6fc0449
Loading
Loading
Loading
Loading
+10 −9
Original line number Diff line number Diff line
@@ -187,18 +187,19 @@ void show_stack(struct task_struct *task, unsigned long *s)

	if (!task) {
		unsigned long sp;
		struct pt_regs *r;

HERE:
		asm volatile ("copy %%r30, %0" : "=r"(sp));
		r = kzalloc(sizeof(struct pt_regs), GFP_KERNEL);
		if (!r)
			return;
		r->iaoq[0] = (unsigned long)&&HERE;
		r->gr[2] = (unsigned long)__builtin_return_address(0);
		r->gr[30] = sp;
		unwind_frame_init(&info, current, r);
		kfree(r);
		{
			struct pt_regs r;

			memset(&r, 0, sizeof(struct pt_regs));
			r.iaoq[0] = (unsigned long)&&HERE;
			r.gr[2] = (unsigned long)__builtin_return_address(0);
			r.gr[30] = sp;

			unwind_frame_init(&info, current, &r);
		}
	} else {
		unwind_frame_init_from_blocked_task(&info, task);
	}