2013-02-27 62 views
1

Linux內核使用SYSCALL_DEFINEn作爲syscall入口點的名稱。我知道它是一個宏,最後被sys_sycallname()取代,'n'是它們所取的參數個數。該慣例僅用於可讀性或其他特定目的嗎?Linux內核系統調用命名約定

在此先感謝。

+0

查看Linux內核源代碼的include/linux/syscalls.h – 2013-02-27 06:26:18

回答

0

我認爲你的想法是合理的。

但我還認爲進一步閱讀SYSCALL_DEFINEn代碼以瞭解參數在用戶空間和內核空間之間傳遞的方式以及如何捕獲到內核空間是有幫助的。由於這些代碼與CPU架構相關,儘管基本思想很常見。

0

沒有。

在過去,系統調用不是以這種方式定義的。定義系統調用的新方法,即使用SYSCALL_DEFINEx()宏來解決安全問題。

例如下面的提交是修復一個:

commit 1a94bc34768e463a93cb3751819709ab0ea80a01 
Author: Heiko Carstens <[email protected]> 
Date: Wed Jan 14 14:13:59 2009 +0100 

    [CVE-2009-0029] System call wrapper infrastructure 

    From: Martin Schwidefsky <[email protected]> 

    By selecting HAVE_SYSCALL_WRAPPERS architectures can activate 
    system call wrappers in order to sign extend system call arguments. 

    All architectures where the ABI defines that the caller of a function 
    has to perform sign extension probably need this. 

你可以找到這個問題的the CVS page更多的描述:

的ABI在Linux內核2.6.28及更早版本上s390,powerpc, sparc64和mips 64位平臺要求在 64位寄存器中的32位參數在從 用戶模式應用程序發送時正確簽名擴展,但無法驗證此情況,其中allo本地 用戶通過製作的系統調用導致拒絕服務(崩潰)或可能獲得特權 。