Why is highest memory page readable by user on x86?

Why is the highest page in memory on x86 (0xfffff000-0xffffffff) readable by user applications? Is there any way to make the following code generate a SIGSEGV using mprotect, mmap, etc?

#include <stdio.h>

int main(int argc, char **argv)
{
printf("%d\n", *(int *) 0xfffffffc);
}

I do belive on x86 this is the read-only system page. The only value that is always assured to cause a SIGSEGV will be NULL (address 0).