[Bug 567956] Re: ARM: Incorrect prefetch abort handling can cause a spin instead of SIGSEGV

Dave Martin Dave.Martin at arm.com
Thu Apr 22 11:01:07 UTC 2010


>From alkml:

Jamie Lokier [jamie at shareable.org] wrote:
[...]
The above patch addresses ARMv6/v7 with NX mappings - and probably only those > TASK_SIZE; NX mappings < TASK_SIZE should have been caught by the PROT_EXEC check already in fault.c.
If I'm right, the NX one is more serious if you can trip a kernel bug into doing this, because it'll result in an unkillable process, stuck in kernel mode and spinning.  But only if you trip a kernel bug.


So it looks like it cound be worth pulling this patch in but SRU is probably good enough— this only becomes a problem if there is already a kernel bug somewhere involving a jump to a random address.


** Description changed:

  http://article.gmane.org/gmane.linux.kernel.commits.head/213639
  
  "    ARM: 5728/1: Proper prefetch abort handling on ARMv6 and ARMv7
  
-     Currently, on ARMv6 and ARMv7, if an application tries to execute
-     code (or garbage) on non-executable page it hangs. It caused by
-     incorrect prefetch abort handling. Now every prefetch abort
-     processes as a translation fault. "
+     Currently, on ARMv6 and ARMv7, if an application tries to execute
+     code (or garbage) on non-executable page it hangs. It caused by
+     incorrect prefetch abort handling. Now every prefetch abort
+     processes as a translation fault. "
  
  I believe the patch was merges in 2.6.32, so it is _probably_ already
  applied in the dove tree (but it might be worth checking)
  
  This patch doesn't appear critical; it just affects cases where
  processes are already crashing by trying to execute in invalid address
  space.  I'm not aware of any real problems in lucid caused by this at
  present.
+ 
+ 
+ Test case:
+ 
+ int main(void)
+ {
+ 	((void (*)(void))0xc0000000)();
+ }

** Description changed:

  http://article.gmane.org/gmane.linux.kernel.commits.head/213639
  
  "    ARM: 5728/1: Proper prefetch abort handling on ARMv6 and ARMv7
  
      Currently, on ARMv6 and ARMv7, if an application tries to execute
      code (or garbage) on non-executable page it hangs. It caused by
      incorrect prefetch abort handling. Now every prefetch abort
      processes as a translation fault. "
  
  I believe the patch was merges in 2.6.32, so it is _probably_ already
  applied in the dove tree (but it might be worth checking)
  
  This patch doesn't appear critical; it just affects cases where
  processes are already crashing by trying to execute in invalid address
  space.  I'm not aware of any real problems in lucid caused by this at
  present.
  
- 
  Test case:
  
  int main(void)
  {
- 	((void (*)(void))0xc0000000)();
+  ((void (*)(void))0xc0000000)();
  }
+ 
+ Desired result is SIGSEGV.

-- 
ARM: Incorrect prefetch abort handling can cause a spin instead of SIGSEGV
https://bugs.launchpad.net/bugs/567956
You received this bug notification because you are a member of Kernel
Bugs, which is subscribed to linux-fsl-imx51 in ubuntu.




More information about the kernel-bugs mailing list