<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:΢ÈíÑźÚ
}
--></style></head>
<body class='hmmessage'><div dir='ltr'>



Hi experts:<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; an user application generates a un-alignment data abort, then in function do_alignment, <BR>kernel read the instruction from the address where data abort occurs by:<BR>&nbsp;&nbsp;fault = __get_user(instr, (u32 *)instrptr);<BR>&nbsp;<BR>&nbsp;&nbsp; after this sentence, instr is the error instruction that generate data abort. <BR>&nbsp;&nbsp; i change this instruction from strict alignment check instruction to not strict alignment<BR>check instruction by:<BR>&nbsp;&nbsp; instr = instr&amp;030;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;at last i write this instruction back to ram, and let cpu execute this instruction again:<BR>&nbsp;&nbsp;&nbsp; *((u32*)instrptr) = instr;<BR>&nbsp;<BR>&nbsp; &nbsp;it works on kernel 2.6.35, but on version 3.0, it failed, the last sentence above&nbsp;generates a Oops:<BR>&nbsp;<BR>[&nbsp;&nbsp; 58.966552] Unable to handle kernel paging request at virtual address 000084ec<br>[&nbsp;&nbsp; 58.974029] pgd = db9f4000<br>[&nbsp;&nbsp; 58.976806] [000084ec] *pgd=1b9db831, *pte=0ae5f59f, *ppte=0ae5fe7e<br>[&nbsp;&nbsp; 58.986877] Internal error: Oops: 81f [#1] PREEMPT SMP<BR>&nbsp;<BR>&nbsp;&nbsp; 1. it seems that kernel 3.0 can not modify user mode program instructions directly even under<BR>SVC mode.<BR>&nbsp;&nbsp; 2. how can i change the page permisson before write back instruction&nbsp;of user mode application?<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for example, find out the page tables of current application, find out the pte which represents<BR>the instruction that generate data abort, then modify pte, write back instruction, restore pte, done.<BR>&nbsp;&nbsp;&nbsp; how to do these?<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp; please advise, thanks very much.<BR>&nbsp;<BR>&nbsp;<BR>Best Regards<BR>                                               </div></body>
</html>