Up until #1031 and seL4/seL4#1516 it was fine for the formalisation to ignore the kernel ELF, because it overlapped with the normal kernel window, so the formalisation could treat objects such as the (empty) global user page table as residing in the kernel window. The objects that reside in the kernel ELF window are the global variables.
seL4/seL4#1516 makes the kernel ELF window and the kernel window distinct. Because we need to require that the physical address of the global user page table fits into 48 bits and this physical address is computed via the kernel ELF window translation, this distinctness becomes directly visible in the formalisation and leads to a contradiction with the separate invariant that all objects live in the kernel window.
The problem currently only leads to a problem in the example state for information flow at the design spec level, and could be circumvented by picking an address in the kernel window that happens to have the right properties under the kernel ELF window translation, but this would not properly model the kernel setup.
The proper fix for this is:
- introduce the kernel ELF window to the formal model
- require that
global_refs are within the kernel ELF window, and that only objects at global_refs addresses are within the kernel ELF window
- relax the
pspace_in_kernel_window invariant to say that an object must be either fully within the kernel window or fully within the kernel ELF window
Up until #1031 and seL4/seL4#1516 it was fine for the formalisation to ignore the kernel ELF, because it overlapped with the normal kernel window, so the formalisation could treat objects such as the (empty) global user page table as residing in the kernel window. The objects that reside in the kernel ELF window are the global variables.
seL4/seL4#1516 makes the kernel ELF window and the kernel window distinct. Because we need to require that the physical address of the global user page table fits into 48 bits and this physical address is computed via the kernel ELF window translation, this distinctness becomes directly visible in the formalisation and leads to a contradiction with the separate invariant that all objects live in the kernel window.
The problem currently only leads to a problem in the example state for information flow at the design spec level, and could be circumvented by picking an address in the kernel window that happens to have the right properties under the kernel ELF window translation, but this would not properly model the kernel setup.
The proper fix for this is:
global_refsare within the kernel ELF window, and that only objects atglobal_refsaddresses are within the kernel ELF windowpspace_in_kernel_windowinvariant to say that an object must be either fully within the kernel window or fully within the kernel ELF window