1. 28 Mar, 2011 2 commits
    • Viktor Rosendahl's avatar
      ARM: 6836/1: kprobes/fix emulation of LDR/STR instruction when Rn == PC · 0652f067
      Viktor Rosendahl authored
      The Rn value from the emulation is unconditionally written back;
      this is fine as long as Rn != PC because in that case, even if the
      instruction isn't a write back instruction, it will only result in the
      same value being written back.
      
      In case Rn == PC, then the emulated instruction doesn't have the
      actual PC value in Rn but an adjusted value; when this is written
      back, it will result in the PC being incorrectly updated.
      
      An altenative solution would be to check bits 24 and 22 to see whether
      the instruction actually is a write back instruction or not. I think
      it's enough to check whether Rn != PC,  because:
      - it's looks cheaper than the alternative
      - to my understaning it's not permitted to update the PC with a write
      back instruction, so we don't lose any ability to emulate legal
      instructions.
      - in case of writing back for non write back instructions where Rn != PC, it doesn't matter because the values are the same.
      
      Regarding the second point above, it would possibly be prudent to add
      some checking to prep_emulate_ldr_str(), so that instructions with
      both write back and Rn == PC would be rejected.
      Signed-off-by: default avatarViktor Rosendahl <viktor.rosendahl@nokia.com>
      Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
      0652f067
    • Russell King's avatar
  2. 27 Mar, 2011 1 commit
  3. 26 Mar, 2011 27 commits
  4. 25 Mar, 2011 10 commits