Christian Stueble stueble@amaunet.cs.uni-dortmund.de writes:
Hello,
I don´t know very much about the i386-processor and Fiasco, therefore I would like to know if the following RMGR/Fiasco extensions are possible.
As default, no task has I/O port access. (CPL > IOPL or I/O permission bitmap pointer invalid)
A task asks via IPC the RMGR for I/O port access, e.g. port=0x80, length=4.
The RMGR checks, if port access can be granted. If yes, the RMGR decreases
the tasks CPL and/or changes the tasks I/O permission bitmap.
==> Task is able to access port 0x80 - 0x83.
The main question: I don´t know if a task is able to change the CPL or the I/O permission bitmap of another task.
That is exactly what io flex pages are designed for. Initially sigma0 has access to all io ports and can use io flex pages to grant port access to other task. If sigma0 grants access a subset of the io address space (adressses which are accessed by in/out instructions) the task gets an io permission bitmap. If sigma0 (or someone else) grants access to the whole io address space l4 changes the iopl so that any thread in this task can access any port and can even disable interrupts.
So the only missing feature is an implementation of io flex pages.
Jean