我知道共享內存創建的(與正常頁),在那裏它創建進程的虛擬地址和附加進程的虛擬地址它是不同的。但是它們在內部將被映射到相同的物理地址幀。兩個進程在Linux中相同的虛擬和物理地址空間(共享巨大頁)
在我們的項目中,我們分配大內存頁(連續和unswappad內存),我們使用第三方的API(英特爾DPDK)創建/安裝的共享內存(從大內存頁)。我觀察到訪問巨大頁面的虛擬地址在所有進程中都是一樣的。
這可能嗎?我很好奇,想知道這怎麼可能?
我知道共享內存創建的(與正常頁),在那裏它創建進程的虛擬地址和附加進程的虛擬地址它是不同的。但是它們在內部將被映射到相同的物理地址幀。兩個進程在Linux中相同的虛擬和物理地址空間(共享巨大頁)
在我們的項目中,我們分配大內存頁(連續和unswappad內存),我們使用第三方的API(英特爾DPDK)創建/安裝的共享內存(從大內存頁)。我觀察到訪問巨大頁面的虛擬地址在所有進程中都是一樣的。
這可能嗎?我很好奇,想知道這怎麼可能?
,如果你只是想知道來自兩個過程是相同的虛擬地址可以映射到相同的物理頁面,然後回答是肯定的。這種情況沒有錯。但是,如果在創建共享頁面時,您始終爲共享物理頁面的所有進程獲取相同的地址,它是唯一的,但正如您所說,您正在使用某個API,那麼它與該API功能(您的問題的部分)有關。如果你確信這是事實,那麼我認爲這是一個可以被利用的漏洞。您應該諮詢相關部門/專家以傳達您的發現。
兩個proccesses具有相同的虛擬地址,它是正確的映射虛擬地址和物理地址後,主進程寫入映射信息文件;!從屬進程讀取文件並進行相同的映射!