RE: probe_kernel_address() causes MCA on bogus address

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



> This is a noticed side effect of trying to redo the function pointer
> handling.  This code:
>
>        void *p1 = 0xdeadbeefdead0000, *p2 = 0xfeeddeadfeedbeef;
>
>        probe_kernel_address(p1, p2);
>
> causes an immediate MCA and reboot on my HP zx2000 wherever I execute it
> in the kernel.  It's supposed to return -EFAULT.

It isn't really safe to call probe_kernel_address() with
any old garbage address on any architeture (e.g. if you pass
it a memory mapped I/O address that has side effects
when read ... you won't die, but you will mess up some
future piece of I/O).

That said ... ia64 does a particularly bad job with this.
The reason is that the ia64 alt-dtlb miss handler assumes that
all of region 6 (0xC...... & 0xD.....) and region 7 (0xE.....
and 0xF.....) addresses map 1:1 with physical memory. Stray
pointers in here result in TLB mappings being inserted for
invalid physical addresses, which result in the MCA that you
see.

Fixing this would be hard ... validating the physical address
in the alt-dtlb miss handler on the exceptionally sparse address
space on some ia64 platforms would add significant costs.

Perhaps ia64 could have its own real-function version of
probe_kernel_address() that does a search of the EFI memory
map ... this isn't used in any performance critical paths.

-Tony
--
To unsubscribe from this list: send the line "unsubscribe linux-ia64" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Kernel]     [Sparc Linux]     [DCCP]     [Linux ARM]     [Yosemite News]     [Linux SCSI]     [Linux x86_64]     [Linux for Ham Radio]

  Powered by Linux