日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

SYSCALL_DEFINE含义

發布時間:2025/3/15 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SYSCALL_DEFINE含义 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這篇文章解釋了為什么kernel采用SYSCALL_DEFINEx宏定義!

CVE-2010-3301是其中一個。這個漏洞的成因是,在64位的內核上執行32位的系統調用時,作為傳遞系統調用號的%rax高32位未被清零處理,而且在進行比較的時候直接使用的%eax,導致高32位被忽略:

cmpl $(IA32_NR_syscalls-1),%eax ja ia32_badsys ia32_do_call: IA32_ARG_FIXUP call *ia32_sys_call_table(,%rax,8)
這樣以來,通過靜心構造的%rax就可以跳轉到它想要的位置去!在這個exploit中,它就利用ptrace()來跟蹤系統調用,并把計算好的想要跳轉地址的偏移傳遞到%rax中,然后執行事先放置好的代碼來提升權限!

修復方法很簡單,要么把%rax的高位清零,要么比較的時候使用%rax。修復這個問題的commit是:

http://git.kernel.org/linus/36d001c70d8a0144ac1d038f6876c484849a74de
http://git.kernel.org/linus/eefdca043e8391dcd719711716492063030b55ac

和這個問題類似的問題之前也曾出現過,CVE-2009-0029,問題更嚴重,涉及很多的系統調用。不同的是,這個涉及64位的內核和64位的用戶空間,來自用戶空間的傳遞系統調用參數的寄存器的高32位同樣沒被清零,而帶32位參數(比如int)的系統調用就會有問題,內核代碼只會檢查對它有意義的低32位,高32位就被忽略而直接傳遞到后面去了,這就會帶來問題了。

問題的解決方法也很簡單,就是要把這些寄存器高位清零。說起來簡單,做起來難。要是和上面一樣直接用匯編處理的話,參數的類型的信息就丟失了,因為你匯編里分不清它到底是32位還是64位;而如果用C處理的話,有那么多系統調用,一個一個處理?那不符合Linus的作風!他是怎么做的呢?用宏!而且用強制轉化,把所有的32位參數聲明為long,然后再強制轉化成實際的類型,比如int。去看看__SC_CASTx()和__SC_LONGx()的定義就知道了:

PLAIN TEXT
C:
#define __SC_CAST1(t1, a1) ? ? ?(t1) a1
#define __SC_LONG1(t1, a1) ? ? ?long a1
?
#define __SYSCALL_DEFINEx(x, name, ...) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? \
? ? ? ? asmlinkage long sys##name(__SC_DECL##x(__VA_ARGS__)); ? ? ? ? ? \
? ? ? ? static inline long SYSC##name(__SC_DECL##x(__VA_ARGS__)); ? ? ? \
? ? ? ? asmlinkage long SyS##name(__SC_LONG##x(__VA_ARGS__)) ? ? ? ? ? ?\
? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? \
? ? ? ? ? ? ? ? __SC_TEST##x(__VA_ARGS__); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?\
? ? ? ? ? ? ? ? return (long) SYSC##name(__SC_CAST##x(__VA_ARGS__)); ? ?\
? ? ? ? } ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? \
? ? ? ? SYSCALL_ALIAS(sys##name, SyS##name); ? ? ? ? ? ? ? ? ? ? ? ? ? ?\
? ? ? ? static inline long SYSC##name(__SC_DECL##x(__VA_ARGS__))

可見Linus大神把宏用到了何等出神入化的地步。:-) 這也是為什么你在內核中看到系統調用都是用SYSCALL_DEFINEx()來定義了。

#define SYSCALL_DEFINE3(name, ...) SYSCALL_DEFINEx(3, _##name, __VA_ARGS__)

#define SYSCALL_DEFINEx(x, sname, ...) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?\
? ? ? ? __SYSCALL_DEFINEx(x, sname, __VA_ARGS__)

#define __SYSCALL_DEFINEx(x, name, ...) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?\
? ? ? ? asmlinkage long sys##name(__SC_DECL##x(__VA_ARGS_

#define SYSCALL_DEFINE1(name, ...) SYSCALL_DEFINEx(1, _##name, __VA_ARGS__)
#define SYSCALL_DEFINE2(name, ...) SYSCALL_DEFINEx(2, _##name, __VA_ARGS__)
#define SYSCALL_DEFINE3(name, ...) SYSCALL_DEFINEx(3, _##name, __VA_ARGS__)
#define SYSCALL_DEFINE4(name, ...) SYSCALL_DEFINEx(4, _##name, __VA_ARGS__)
#define SYSCALL_DEFINE5(name, ...) SYSCALL_DEFINEx(5, _##name, __VA_ARGS__)
#define SYSCALL_DEFINE6(name, ...) SYSCALL_DEFINEx(6, _##name, __VA_ARGS__)
看這個更直接一點,2.6.35中有這樣的宏定義
mount系統調用
在fs/namespace.c中,有
SYSCALL_DEFINE5(mount, char __user *, dev_name, char __user *, dir_name,)

總結

以上是生活随笔為你收集整理的SYSCALL_DEFINE含义的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲第一二三四区 | 天天艹夜夜艹 | 午夜影院一区 | 中文字幕第7页 | 四虎免费视频 | 久久久99精品国产一区二区三区 | 日本免费在线视频观看 | 免费网站在线观看黄色 | 麻豆久久久午夜一区二区 | 国产传媒第一页 | 精品免费国产一区二区三区四区 | 午夜福利三级理论电影 | 天天爱综合 | 欧美日韩视频免费观看 | 亚洲黄av | 国产精品久久久久无码av色戒 | 日本欧美韩国国产精品 | 精品人妻一区二区三区三区四区 | 欧美你懂的| 国产超碰91 | аⅴ资源中文在线天堂 | 日韩视频免费 | 视频成人免费 | 好吊色在线观看 | 熟妇人妻精品一区二区三区视频 | 黑人精品无码一区二区三区 | 亚色中文字幕 | 国产成人无码一区二区三区在线 | 五月婷中文字幕 | 91久久综合精品国产丝袜蜜芽 | 国产a免费 | 少妇情理伦片丰满午夜在线观看 | 伊人天天 | 美女被草视频在线观看 | 欧美久久99 | 欧美国产精品一区二区三区 | 亚洲精品自拍视频 | 久久久久亚洲av成人毛片韩 | 精品国精品国产 | 老湿影院av | 久久久久无码国产精品 | 五月久久| 欧美粗暴jizz性欧美20 | 久久97精品久久久久久久不卡 | 国产113页 | 91在线观看网站 | 国产高潮视频在线观看 | 香港三级日本三级韩国三级 | 成人高清视频免费观看 | 国产一级一片 | 99久99| 黄色男人的天堂 | 中文在线一区二区三区 | 电影寂寞少女免费观看 | 日本黄页网站免费大全 | av久久久| 性欧美巨大乳 | 天天操女人| 欧美aaaa视频 | 蜜臀精品一区二区三区 | 偷偷操不一样的久久 | avtt在线| 华人色| 91麻豆精品国产午夜天堂 | 小毛片网站 | 国产免费av一区二区三区 | 夜色在线视频 | 国产黄a| h视频免费在线观看 | 成人福利视频导航 | 日本欧美不卡 | 久久久国产高清 | 日美韩一区二区三区 | 黄色一级免费看 | 婷婷激情五月网 | 免费人成年激情视频在线观看 | 欧美二三区 | 欧美精品久久久久久久免费 | 一区二区三区久久精品 | 日本黄网站在线观看 | 久久黄色一级视频 | a级无毛片 | 精品福利一区二区 | 国产视频不卡 | 五月天久久婷婷 | 欧美在线一二三 | 男人添女人荫蒂国产 | 一级小毛片 | 男女啊啊啊视频 | 亚洲第一视频 | 中文字幕在线观看第一页 | 亚洲国产精品久 | 超碰97人人草 | 色日韩 | 成人91在线| 国际av在线 | 亚洲AV综合色区无码国产播放 | 国产一卡二卡三卡四卡 | 欧美高清hd18日本 |