亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区
Chinaunix
標(biāo)題:
有個arm copy form user的情景沒想通
[打印本頁]
作者:
liu090
時間:
2011-05-24 11:05
標(biāo)題:
有個arm copy form user的情景沒想通
比如我寫個驅(qū)動 ,有個ioctl ,該iocontrol 里有寫user data 8K 到kernel
那我就在iocontrol 該item 下實現(xiàn)
tbuf = vmalloc(tbuf_size); /* 在內(nèi)核分配8K 非連續(xù)區(qū)*/
if (!tbuf)
return -ENOMEM;
err = copy_from_user(tbuf, buf, len); /*然后call copy from user 去讀user buf 到tbuf */
但是tbuf 是vmalloc 在kernel 非連續(xù)區(qū)分配的page ,雖然沒有缺頁情況,
但是vmalloc 只更新主內(nèi)核頁表, 而當(dāng)前進(jìn)程使用ioctrl 系統(tǒng)調(diào)用切入
內(nèi)核時,進(jìn)程在內(nèi)核態(tài)使用的是進(jìn)程當(dāng)前的頁表,那么3G 以上表項開始
是空的,那么訪問tbuf ,就是寫到tbuf 時應(yīng)該會引起頁表異常,
根據(jù)
.macro ldr1w ptr reg abort
100: ldrt \reg, [\ptr], #4
.section __ex_table, "a"
.long 100b, \abort
.previous
.endm
異常處理在abort 處
.section .fixup,"ax"
.align 0
copy_abort_preamble
ldmfd sp!, {r1, r2}
sub r3, r0, r1
rsb r1, r3, r2
str r1, [sp]
bl __memzero
ldr r0, [sp], #4
copy_abort_end
.previous
照道理說這樣的異常應(yīng)該可以修復(fù)的,就是修復(fù)當(dāng)前進(jìn)程頁表3g 以上的內(nèi)存和主內(nèi)核頁表3G以上的一樣,這樣就可以繼續(xù)執(zhí)行了
但是fixup 的代碼沒有看出有這樣的處理
不知道我那步理解不對,請教
作者:
liu090
時間:
2011-05-24 15:35
兄弟們也沒想通?
作者:
ioriyw
時間:
2011-05-25 10:54
本帖最后由 ioriyw 于 2011-05-25 10:57 編輯
所有進(jìn)程3g以上的頁表(768以上)是共享的(指針方式 ,一個頁目錄項其實就是個指針,指向內(nèi)核頁表項,也就是共享),也就是內(nèi)核頁表。
至于何時共享,是頁面異常處理過程中逐步設(shè)置的?蓞⒖柬撁娈惓L幚砗瘮(shù)。
作者:
liu090
時間:
2011-05-26 10:50
你沒理解我問的意思,我的理解是會發(fā)生異常,并修復(fù),但是fixup 應(yīng)該跳到原來發(fā)生的指令再執(zhí)行一下,但是fixup 的代碼沒看出來,比如b 100 去重新執(zhí)行
作者:
marsbible
時間:
2011-05-26 21:25
估計沒在fixup返回吧,異常處理函數(shù)中返回的吧
歡迎光臨 Chinaunix (http://www.72891.cn/)
Powered by Discuz! X3.2