Commit 037ebff3 authored by Stas Sergeev's avatar Stas Sergeev Committed by Linus Torvalds

[PATCH] Fix IO bitmap invalidate

There is a bug where if any process that obtained an IO access
permissions via ioperm() does not explicitly "drop" that permissions,
the IO permissions don't get properly invalidated on process exit.

The cause is that exit_thread() only invalidates the per-thread
io_bitmap pointer, but doesn't invalidate the per-TSS io_bitmap pointer
as well. 

As the per-thread pointer is invalidated, __switch_to() doesn't take
care of that one either, so the per-TSS pointer stays valid as long as
some other process does ioperm().

This fixes the problem - it invalidates the per-TSS io_bitmap pointer
and the problem goes away. 
parent 82ec2170
...@@ -293,8 +293,12 @@ void exit_thread(void) ...@@ -293,8 +293,12 @@ void exit_thread(void)
/* The process may have allocated an io port bitmap... nuke it. */ /* The process may have allocated an io port bitmap... nuke it. */
if (unlikely(NULL != tsk->thread.io_bitmap_ptr)) { if (unlikely(NULL != tsk->thread.io_bitmap_ptr)) {
int cpu = get_cpu();
struct tss_struct *tss = init_tss + cpu;
kfree(tsk->thread.io_bitmap_ptr); kfree(tsk->thread.io_bitmap_ptr);
tsk->thread.io_bitmap_ptr = NULL; tsk->thread.io_bitmap_ptr = NULL;
tss->io_bitmap_base = INVALID_IO_BITMAP_OFFSET;
put_cpu();
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment