[ARM] 2959/1: Add test for invalid LDRD/STRD Rd cases in ARM alignment handler

Patch from George G. Davis

Add test for invalid LDRD/STRD Rd cases in ARM alignment handler
and restore SWP printk KERN_ERR.

Signed-off-by: Steve Longerbeam <slongerbeam@mvista.com>
Signed-off-by: George G. Davis <gdavis@mvista.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>

authored by George G. Davis and committed by Russell King 19da83f6 79d13b62

+10 -1
+10 -1
arch/arm/mm/alignment.c
··· 330 { 331 unsigned int rd = RD_BITS(instr); 332 333 ai_dword += 1; 334 335 if (user_mode(regs)) ··· 364 } 365 366 return TYPE_LDST; 367 - 368 fault: 369 return TYPE_FAULT; 370 } ··· 667 else if ((instr & 0x001000f0) == 0x000000d0 || /* LDRD */ 668 (instr & 0x001000f0) == 0x000000f0) /* STRD */ 669 handler = do_alignment_ldrdstrd; 670 else 671 goto bad; 672 break; ··· 738 */ 739 do_bad_area(current, current->mm, addr, fsr, regs); 740 return 0; 741 742 bad: 743 /*
··· 330 { 331 unsigned int rd = RD_BITS(instr); 332 333 + if (((rd & 1) == 1) || (rd == 14)) 334 + goto bad; 335 + 336 ai_dword += 1; 337 338 if (user_mode(regs)) ··· 361 } 362 363 return TYPE_LDST; 364 + bad: 365 + return TYPE_ERROR; 366 fault: 367 return TYPE_FAULT; 368 } ··· 663 else if ((instr & 0x001000f0) == 0x000000d0 || /* LDRD */ 664 (instr & 0x001000f0) == 0x000000f0) /* STRD */ 665 handler = do_alignment_ldrdstrd; 666 + else if ((instr & 0x01f00ff0) == 0x01000090) /* SWP */ 667 + goto swp; 668 else 669 goto bad; 670 break; ··· 732 */ 733 do_bad_area(current, current->mm, addr, fsr, regs); 734 return 0; 735 + 736 + swp: 737 + printk(KERN_ERR "Alignment trap: not handling swp instruction\n"); 738 739 bad: 740 /*