[PATCH] reset tss->io_bitmap_owner in sys_ioperm()
authorBart Oldeman <bartoldeman@users.sourceforge.net>
Sat, 5 Nov 2005 23:54:07 +0000 (12:54 +1300)
committerLinus Torvalds <torvalds@g5.osdl.org>
Sun, 6 Nov 2005 00:31:36 +0000 (16:31 -0800)
my patch "x86: initialise tss->io_bitmap_owner to something" (commit ID
d5cd4aadd3d220afac8e3e6d922e333592551f7d) introduced a problem with a
program (DOSEMU) that called ioperm after already doing some port i/o.

The problem is that a process switch return causes tss->io_bitmap_base
to be set to IO_BITMAP_OFFSET so that the fault (that *really* sets the
io bitmap) never triggers.

This fixes that regression.

Signed-off-by: Bart Oldeman <bartoldeman@users.sourceforge.net>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
arch/i386/kernel/ioport.c

index f2b37654777f522af8231e14a6520a572dcb9cfb..b59a34dbe262d4c3c039608bd27cef3974bfe234 100644 (file)
@@ -108,8 +108,11 @@ asmlinkage long sys_ioperm(unsigned long from, unsigned long num, int turn_on)
        /*
         * Sets the lazy trigger so that the next I/O operation will
         * reload the correct bitmap.
+        * Reset the owner so that a process switch will not set
+        * tss->io_bitmap_base to IO_BITMAP_OFFSET.
         */
        tss->io_bitmap_base = INVALID_IO_BITMAP_OFFSET_LAZY;
+       tss->io_bitmap_owner = NULL;
 
        put_cpu();