[RFC] Handling kernel stack overflows

Eric W. Biederman ebiederm at xmission.com
Fri Aug 3 08:36:23 EDT 2007


Well we currently keep a struct thread_info on the stack
which while not as bad as task_struct has it's own uses
and implications which may limit what you are trying
to do.

That said a function like:

int call_on_new_stack(int (*continuation)(void *), void *closure)
{
	struct task_struct *tsk;
	struct thread_info *ti;

	if (plenty_of_stack_space())
		return continuation(closure);

	tsk = current();
	ti = alloc_thread_info(tsk);
	if (!ti)
		return -ENOMEM;

	setup_extra_thread_info(tsk, ti, continuation, closure);
	schedule();
}

Might make sense.  Last I heard the block layer and xfs seemed
to have largely solved their problems with running short on stack
space, so I don't know if it is necessary but it certainly sounds
relatively simple and interesting.

Running short on stack space is a recurring theme so a function that
allows us to have a little more when we really need it and be able to
switch even x86_64 to 4K stacks would be interesting.

I'm not quite certain where we could insert calls to call_on_new_stack,
but it looks simple enough that it is worth coding up and playing
with.  If the results are good it could be worth merging.

Eric



More information about the kexec mailing list