第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

解釋Linux提交消息,該消息在POP SS后面加#BP中斷(INT3)的補(bǔ)丁/保護(hù)

解釋Linux提交消息,該消息在POP SS后面加#BP中斷(INT3)的補(bǔ)丁/保護(hù)

汪汪一只貓 2021-04-13 17:14:56
這是參考CVE-2018-8897(與CVE-2018-1087有關(guān)),描述如下:在某些或所有操作系統(tǒng)內(nèi)核的開發(fā)中,《英特爾64和IA-32體系結(jié)構(gòu)軟件開發(fā)人員手冊(cè)》(SDM)的系統(tǒng)編程指南中的一條語句處理不當(dāng),導(dǎo)致MOV SS推遲的#DB異常的行為異常或POP SS,例如Windows,macOS,某些Xen配置或FreeBSD中的特權(quán)升級(jí)或Linux內(nèi)核崩潰所證明的那樣。MOV到SS和POP SS指令禁止中斷(包括NMI),數(shù)據(jù)斷點(diǎn)和單步陷阱異常,直到下一條指令之后的指令邊界為止(SDM第3A卷; 6.8.3節(jié))。(禁止的數(shù)據(jù)斷點(diǎn)是由MOV到SS或POP到SS指令本身訪問的存儲(chǔ)器上的斷點(diǎn)。)請(qǐng)注意,調(diào)試異常不受中斷允許(EFLAGS.IF)系統(tǒng)標(biāo)志(SDM第3A卷;第2節(jié),第1部分)的禁止。第2.3節(jié))。如果MOV到SS或POP到SS指令之后的指令是SYSCALL,SYSENTER,INT 3等指令,該指令以CPL <3的方式將控制權(quán)轉(zhuǎn)移到操作系統(tǒng),則在將調(diào)試轉(zhuǎn)移到CPL <3的情況下會(huì)傳遞調(diào)試異常。已經(jīng)完成。OS內(nèi)核可能不希望事件發(fā)生的順序如此,因此發(fā)生時(shí)可能會(huì)遇到意外的行為。在閱讀有關(guān)Linux內(nèi)核的相關(guān)git commit時(shí),我注意到該提交消息指出:x86 / entry / 64:請(qǐng)勿將IST條目用于#BP堆棧#BP / int3沒有IST值得的。我們不允許kprobes出現(xiàn)在內(nèi)核中少數(shù)以無效堆棧運(yùn)行于CPL0的地方,而32位內(nèi)核永遠(yuǎn)將正常中斷門用于#BP。此外,在內(nèi)核模式下,我們不允許將kprobes放在有userg的地方,因此“偏執(zhí)狂”也是不必要的。鑒于該漏洞,我試圖了解提交消息中的最后一句話。我了解到,IST條目是指中斷堆棧表中的(據(jù)說)“已知良好”堆棧指針之一,該指針可用于處理中斷。我還了解到#BP指的是斷點(diǎn)異常(與等效INT3),而kprobes是調(diào)試機(jī)制,據(jù)稱該機(jī)制僅在環(huán)0(CPL0)特權(quán)級(jí)別的內(nèi)核中運(yùn)行。但是我在接下來的部分中完全迷失了,這可能是因?yàn)椤?usergs”是一個(gè)拼寫錯(cuò)誤,而我只是缺少了預(yù)期的內(nèi)容:此外,在內(nèi)核模式下,我們不允許將kprobes放在有userg的地方,因此“偏執(zhí)狂”也是不必要的。這句話是什么意思?
查看完整描述

1 回答

?
飲歌長嘯

TA貢獻(xiàn)1951條經(jīng)驗(yàn) 獲得超3個(gè)贊

usergs指的是x86-64 swapgs指令,該指令gs與內(nèi)部保存的GS值交換給內(nèi)核,以從syscall入口點(diǎn)查找內(nèi)核堆棧。交換也交換緩存的gsbase段信息,而不是根據(jù)gs值本身從GDT重新加載。(wrgsbase可以獨(dú)立于GDT / LDT更改GS基礎(chǔ))

AMD的設(shè)計(jì)是syscall不更改RSP以指向內(nèi)核堆棧,并且不讀取/寫入任何內(nèi)存,因此syscall它本身可以很快。但是隨后您進(jìn)入內(nèi)核,其中所有寄存器都保存著它們的用戶空間值。請(qǐng)參閱為什么Windows64使用與x86-64上所有其他操作系統(tǒng)不同的調(diào)用約定?在2000年左右內(nèi)核開發(fā)人員和AMD架構(gòu)師之間討論郵件列表討論的一些鏈接,在出售任何AMD64 CPU之前調(diào)整其設(shè)計(jì)syscallswapgs使其可用。


顯然,要跟蹤GS當(dāng)前是內(nèi)核還是用戶值對(duì)于錯(cuò)誤處理是很棘手的:沒有辦法說“我現(xiàn)在要kernelgs”。您必須知道是否swapgs在任何錯(cuò)誤處理路徑中運(yùn)行。唯一的指令是交換,而不是將其設(shè)置為一個(gè)與另一個(gè)。

閱讀arch/x86/entry/entry_64.S例如https://github.com/torvalds/linux/blob/9fb71c2f230df44bdd237e9a4457849a3909017d/arch/x86/entry/entry_64.S#L1267(來自當(dāng)前Linux)中的注釋,其中提到了usergs,下一個(gè)注釋塊描述了swapgs在執(zhí)行之前使用內(nèi)核gsbase跳轉(zhuǎn)到一些錯(cuò)誤處理代碼。

IIRC,Linux內(nèi)核[gs:0]在該線程的內(nèi)核堆棧的最低地址處擁有一個(gè)線程信息塊。該塊包括內(nèi)核堆棧指針(作為絕對(duì)地址,而不是相對(duì)于gs)。

如果此錯(cuò)誤基本上是在誘使內(nèi)核rsp從用戶控制的gsbase加載內(nèi)核,或者搞砸了死胡同,swapgs從而使它gs在某些時(shí)候出現(xiàn)錯(cuò)誤,我不會(huì)感到驚訝。


查看完整回答
反對(duì) 回復(fù) 2021-04-16
  • 1 回答
  • 0 關(guān)注
  • 367 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)