名 前
prctl − プ ロ セ ス の 操 作 を 行 な う
書 式
#include <sys/prctl.h>
int
prctl(int option, unsigned long
arg2, unsigned long arg3,
unsigned long arg4, unsigned long
arg5);
説 明
prctl()
の 動 作 は 最 初
の 引 き 数 に よ
っ て 決 定 さ れ
る (こ の 値 は
<linux/prctl.h> に 定 義
さ れ て い る )。
残 り の 引 き 数
は 最 初 の 引 き
数 に よ っ て 変
化 す る 。 一 番
目 の 引 き 数 と
し て 以 下 の も
の を 指 定 で き
る :
PR_CAPBSET_READ (Linux 2.6.25 以 降 )
で 指 定 さ れ た
ケ ー パ ビ リ テ
ィ が 呼 び 出 し
た ス レ ッ ド の
ケ ー パ ビ リ テ
ィ バ イ ン デ ィ
ン グ セ ッ ト (capability
bounding set) に 含 ま れ て
い る 場 合 、 (関
数 の 結 果 と し
て ) 1 を 返 し 、 そ
う で な い 場 合 0
を 返 す (ケ ー パ
ビ リ テ ィ 定 数
は <linux/capability.h> で 定
義 さ れ て い る
)。 ケ ー パ ビ リ
テ ィ バ ウ ン デ
ィ ン グ セ ッ ト
は 、 execve(2) を 呼
び 出 し た 際 に
、 フ ァ イ ル の
許 可 (permitted) ケ ー パ
ビ リ テ ィ の 中
で そ の プ ロ セ
ス が 獲 得 で き
る ケ ー パ ビ リ
テ ィ を 指 示 す
る も の で あ る
。
arg2 に 指 定 さ れ た ケ ー パ ビ リ テ ィ が 有 効 で な い 場 合 、 呼 び 出 し は エ ラ ー EINVAL で 失 敗 す る 。
PR_CAPBSET_DROP (Linux
2.6.25 以 降 ) 呼 び 出
し た ス レ ッ ド
が ケ ー パ ビ リ
テ ィ CAP_SETPCAP を 持
っ て い る 場 合
、 呼 び 出 し た
ス レ ッ ド の ケ
ー パ ビ リ テ ィ
バ ウ ン デ ィ ン
グ セ ッ ト か ら
arg2 で 指 定 さ れ
た ケ ー パ ビ リ
テ ィ を 外 す 。
呼 び 出 し た ス
レ ッ ド の 子 プ
ロ セ ス は 変 更
後 の バ ウ ン デ
ィ ン グ セ ッ ト
を 継 承 す る 。
呼 び 出 し た ス
レ ッ ド が CAP_SETPCAP
を 持 っ て い な
い 場 合 、 呼 び
出 し は エ ラ ー
EPERM で 失 敗 す る
。 arg2 に 指 定 さ
れ た ケ ー パ ビ
リ テ ィ が 有 効
で な い 場 合 、
EINVAL で 失 敗 す る
。 フ ァ イ ル ケ
ー パ ビ リ テ ィ
が カ ー ネ ル で
有 効 に な っ て
い な い 場 合 (こ
の 場 合 に は バ
ウ ン デ ィ ン グ
セ ッ ト が サ ポ
ー ト さ れ な い
)、 EINVAL で 失 敗 す
る 。
PR_SET_CHILD_SUBREAPER (Linux 3.4 以 降
)
arg2 が 0 以 外 の 場 合 、 呼 び 出 し 元 プ ロ セ ス の "child subreaper" 属 性 を セ ッ ト す る 。 arg2 が 0 の 場 合 、 こ の 属 性 を ク リ ア す る 。 プ ロ セ ス が child subreaper の マ ー ク が 付 い て い る 場 合 、 こ の プ ロ セ ス の 子 プ ロ セ ス や そ の 子 孫 に は す べ て subreaper の マ ー ク が 付 与 さ れ る 。 subreaper は 事 実 上 そ の 子 孫 の プ ロ セ ス に 対 し て init(1) の 役 割 を 果 た す 。 孤 児 に な っ た プ ロ セ ス (直 接 の 親 プ ロ セ ス が す で に 終 了 し て い る プ ロ セ ス ) が 終 了 し た 際 、 そ の プ ロ セ ス に subreaper の マ ー ク が 付 い て い る と 、 最 も 近 い 存 在 す る 先 祖 の subreaper プ ロ セ ス に SIGCHLD シ グ ナ ル が 送 ら れ 、 そ の プ ロ セ ス の wait を 使 っ て 終 了 ス テ ー タ ス を 知 る こ と が で き る 。
PR_GET_CHILD_SUBREAPER
(Linux 3.4 以 降 ) 呼 び 出
し 元 の "child subreaper"
設 定 を 、 (int *) arg2
が 指 す 場 所 に
返 す 。
PR_SET_DUMPABLE (Linux 2.3.20 以 降 )
(Linux 2.3.20 以 降 ) デ フ ォ ル ト の 振 る 舞 い で は コ ア ダ ン プ を 引 き 起 こ す よ う な シ グ ナ ル を 受 信 し た と き に 、 呼 び 出 し 元 の プ ロ セ ス で コ ア ダ ン プ を 生 成 す る か ど う か を 決 定 す る フ ラ グ を 設 定 す る (通 常 こ の フ ラ グ は 、 デ フ ォ ル ト で は セ ッ ト さ れ て い る が 、 set−user−ID あ る い は set−group−ID プ ロ グ ラ ム が 実 行 さ れ た り 、 さ ま ざ ま な シ ス テ ム コ ー ル に よ っ て プ ロ セ ス の UID や GID が 操 作 さ れ た と き に ク リ ア さ れ る )。 2.6.12 以 前 の カ ー ネ ル で は 、 arg2 は 0 (プ ロ セ ス は ダ ン プ 不 可 ) あ る い は 1 (プ ロ セ ス は ダ ン プ 可 能 ) の ど ち ら か で な け れ ば な ら な い 。 2.6.13 か ら 2.6.17 ま で の カ ー ネ ル で は 、 値 2 も 認 め ら れ て い た 。 こ の 値 を 指 定 す る と 、 通 常 は ダ ン プ さ れ な い バ イ ナ リ が root だ け が 読 み 込 み 可 能 な 形 で ダ ン プ さ れ た 。 セ キ ュ リ テ ィ 上 の 理 由 か ら 、 こ の 機 能 は 削 除 さ れ た (proc(5) の /proc/sys/fs/suid_dumpable の 説 明 も 参 照 )。 ダ ン プ 不 可 の プ ロ セ ス を ptrace(2) PTRACE_ATTACH 経 由 で 接 続 す る こ と は で き な い 。
PR_GET_DUMPABLE (Linux 2.3.20 以 降 )
(Linux 2.3.20 以 降 ) 呼 び 出 し 元 プ ロ セ ス に お け る ダ ン プ 可 能 フ ラ グ の 現 在 の 状 態 を (関 数 の 結 果 と し て ) 返 す 。
PR_SET_ENDIAN (Linux
2.6.18 以 降 、 PowerPC の み
) 呼 び 出 し 元 プ
ロ セ ス の エ ン
デ ィ ア ン 設 定
(endian−ness) を arg2 で 指
定 さ れ た 値 に
設 定 す る 。 指
定 で き る 値 は
PR_ENDIAN_BIG, PR_ENDIAN_LITTLE,
PR_ENDIAN_PPC_LITTLE (PowerPC 擬 似
リ ト ル エ ン デ
ィ ア ン ) の い ず
れ か 一 つ で あ
る 。
PR_GET_ENDIAN (Linux 2.6.18 以 降 、
PowerPC の み ) 呼 び 出
し 元 プ ロ セ ス
の エ ン デ ィ ア
ン 設 定 (endian−ness) を
(int *) arg2 が 指 す 場
所 に 格 納 し て
返 す 。
PR_SET_FPEMU (Linux 2.4.18 以 降 , 2.5.9,
ia64 の み ) 浮 動 小 数
点 エ ミ ュ レ ー
シ ョ ン (floating−point emulation)
制 御 ビ ッ ト を
arg2 で 指 定 さ れ
た 値 に 設 定 す
る 。 指 定 で き
る 値 は PR_FPEMU_NOPRINT (浮
動 小 数 点 命 令
ア ク セ ス を 黙
っ て エ ミ ュ レ
ー ト す る ) か
PR_FPEMU_SIGFPE (浮 動 小 数
点 命 令 を エ ミ
ュ レ ー ト せ ず
、 代 わ り に SIGFPE
を 送 る ) で あ る
。
PR_GET_FPEMU (Linux 2.4.18 以 降 , 2.5.9,
ia64 の み ) 浮 動 小 数
点 エ ミ ュ レ ー
シ ョ ン 制 御 ビ
ッ ト の 値 を (int *)
arg2 が 指 す 場 所
に 格 納 し て 返
す 。
PR_SET_FPEXC (Linux 2.4.21 お よ び
2.5.32 以 降 、 PowerPC の み
) 浮 動 小 数 点 例
外 モ ー ド (floating−point
exception mode) を arg2 で 指
定 さ れ た 値 に
設 定 す る 。 指
定 で き る の は
以 下 の 値 で あ
る : PR_FP_EXC_SW_ENABLE (FPEXC で
浮 動 小 数 点 例
外 を 有 効 に す
る )、 PR_FP_EXC_DIV (0 除 算
)、 PR_FP_EXC_OVF (オ ー バ
ー フ ロ ー )、
PR_FP_EXC_UND (ア ン ダ ー
フ ロ ー )、 PR_FP_EXC_RES
(不 正 確 な 結 果
(inexact result))、 PR_FP_EXC_INV (不
正 な 命 令 (invalid
operation))、 PR_FP_EXC_DISABLED (浮
動 小 数 点 例 外
を 無 効 に す る
)、 PR_FP_EXC_NONRECOV (async nonrecoverable
exception mode)、 PR_FP_EXC_ASYNC (async
recoverable exception mode)、 PR_FP_EXC_PRECISE
(precise exception mode)。
PR_GET_FPEXC(Linux 2.4.21 お よ び
2.5.32 以 降 、 PowerPC の み
) 浮 動 小 数 点 例
外 モ ー ド の 値
を (int *) arg2 が 指 す
場 所 に 格 納 し
て 返 す 。
PR_SET_KEEPCAPS (Linux 2.2.18 以 降 )
ス レ ッ ド の 「
ケ ー パ ビ リ テ
ィ 保 持 」 フ ラ
グ を 設 定 す る
。 こ の フ ラ グ
は 、 ス レ ッ ド
の 実 UID、 実 効 UID、
保 存 set−user−ID の う
ち 少 な く と も
一 つ が 0 で あ っ
た 状 態 か ら 、
こ れ ら 全 て が 0
以 外 に 変 更 さ
れ た と き 、 ス
レ ッ ド の 許 可
ケ ー パ ビ リ テ
ィ 集 合 が ク リ
ア さ れ る か ど
う か を 決 定 す
る 。 デ フ ォ ル
ト で は 、 こ の
よ う な 変 更 が
行 わ れ た 場 合
、 許 可 ケ ー パ
ビ リ テ ィ セ ッ
ト は ク リ ア さ
れ る 。 「 ケ ー
パ ビ リ テ ィ 保
持 」 フ ラ グ を
設 定 す る と 、
許 可 ケ ー パ ビ
リ テ ィ セ ッ ト
は ク リ ア さ れ
な く な る 。 arg2
は 0 (許 可 ケ ー パ
ビ リ テ ィ を ク
リ ア す る ) か 1 (許
可 ケ ー パ ビ リ
テ ィ を 保 持 す
る ) の ど ち ら か
で な け れ ば な
ら な い 。 (こ の
よ う な ID の 変 更
が 行 わ れ た 場
合 、 「 ケ ー パ
ビ リ テ ィ 保 持
」 フ ラ グ の 設
定 に 関 わ ら ず
、 ス レ ッ ド の
実 効 ケ ー パ ビ
リ テ ィ セ ッ ト
は 常 に ク リ ア
さ れ る 。 ) execve(2)
が 呼 び 出 さ れ
る と 、 「 ケ ー
パ ビ リ テ ィ 保
持 」 フ ラ グ は 0
に リ セ ッ ト さ
れ る 。
PR_GET_KEEPCAPS (Linux 2.2.18 以 降 )
呼 び 出 し 元 ス
レ ッ ド に お け
る 「 ケ ー パ ビ
リ テ ィ 保 持 」
フ ラ グ の 現 在
の 状 態 を (関 数
の 結 果 と し て )
返 す 。
PR_SET_NAME (Linux 2.6.9 以 降 ) 呼
び 出 し 元 ス レ
ッ ド の プ ロ セ
ス 名 を (char *) arg2
が 指 す 場 所 に
格 納 さ れ た 値
を 使 っ て 設 定
す る 。 名 前 は
終 端 の NULL バ イ ト
を 含 め て 最 大
で 16 バ イ ト で あ
る (終 端 の NULL バ イ
ト を 含 め た 文
字 列 の 長 さ が 16
バ イ ト を 超 え
る 場 合 、 文 字
列 は 黙 っ て 切
り 詰 め ら れ る
)。 こ れ は 、
pthread_setname_np(3) で 設 定
で き 、 pthread_getname_np(3)
で 取 得 で き る
の と 同 じ 属 性
で あ る 。 同 様
に 、 tid が 呼 び
出 し 元 ス レ ッ
ド の ID の 場 合 、
こ の 属 性 は
/proc/self/task/[tid]/comm 経 由 で
も ア ク セ ス 可
能 で あ る 。
PR_GET_NAME (Linux 2.6.11 以 降 ) 呼
び 出 し 元 ス レ
ッ ド の 名 前 を
(char *) arg2 が 指 す
場 所 に 格 納 し
て 返 す 。 バ ッ
フ ァ ー は 最 大
で 16 バ イ ト を 格
納 で き る よ う
に す べ き で あ
る 。 返 さ れ る
文 字 列 は ヌ ル
終 端 さ れ る 。
PR_SET_NO_NEW_PRIVS (Linux 3.5 以 降 )
呼 び 出 し 元 プ
ロ セ ス の no_new_privs
ビ ッ ト を arg2 の
値 に 設 定 す る
。 no_new_privs が 1 に 設
定 さ れ る と 、
execve(2) は 、 execve(2) の
呼 び 出 し な し
で は 実 行 で き
な か っ た こ と
に 対 す る 特 権
を 許 可 し な く
な る (例 え ば 、
set−user−ID/set−group−ID 許
可 ビ ッ ト や フ
ァ イ ル ケ ー パ
ビ リ テ ィ が 動
作 し な く な る
)。 一 度 設 定 さ
れ る 、 こ の ビ
ッ ト は 解 除 す
る こ と が で き
な い 。 こ の ビ
ッ ト の 設 定 は
fork(2) や clone(2) で 作
成 さ れ た 子 プ
ロ セ ス に 継 承
さ れ 、 execve(2) の
前 後 で 保 持 さ
れ る 。 詳 し い
情 報 は 、 カ ー
ネ ル ソ ー ス フ
ァ イ ル
Documentation/prctl/no_new_privs.txt を
参 照 。
PR_GET_NO_NEW_PRIVS (Linux 3.5 以 降 )
現 在 の プ ロ セ
ス の no_new_privs ビ ッ
ト の 値 を (関 数
の 結 果 と し て )
返 す 。 値 0 は 通
常 の execve(2) の 動
作 を 意 味 す る
。 値 1 は execve(2) が
上 記 で 述 べ た
特 権 を 制 限 す
る 動 作 を す る
こ と を 示 す 。
PR_SET_PDEATHSIG (Linux 2.1.57 以 降 )
親 プ ロ セ ス 死
亡 シ グ ナ ル (parent process
death signal) を arg2 に 設
定 す る (設 定 で
き る シ グ ナ ル
値 の 範 囲 は 1..maxsig
で あ り 、 0 は 通
知 の 解 除 で あ
る )。 呼 び 出 し
元 プ ロ セ ス の
親 プ ロ セ ス が
死 ん だ 際 に 、
こ こ で 設 定 し
た 値 が シ グ ナ
ル と し て 通 知
さ れ る 。 こ の
値 は fork(2) の 子 プ
ロ セ ス で は 解
除 さ れ る 。 (Linux 2.4.36
以 降 お よ び 2.6.23 以
降 で は ) set−user−ID
も し く は set−group−ID
さ れ た バ イ ナ
リ を 実 行 し た
場 合 に も 、 こ
の フ ラ グ は 解
除 さ れ る 。 こ
の 値 は execve(2) の
前 後 で 保 持 さ
れ る 。
PR_GET_PDEATHSIG (Linux 2.3.15 以 降 )
親 プ ロ セ ス 死
亡 シ グ ナ ル の
現 在 の 値 を (int *)
arg2 が 指 す 場 所
に 格 納 し て 返
す 。
PR_SET_PTRACER (Linux 3.4 以 降 ) こ
の 設 定 は Yama LSM が
有 効 に な っ て
い て モ ー ド 1
("restricted ptrace") の 場 合
の み に 意 味 を
持 つ (モ ー ド は
/proc/sys/kernel/yama/ptrace_scope で 参
照 可 能 )。 "ptrace プ
ロ セ ス ID" が arg2
で 渡 さ れ た 場
合 、 呼 び 出 し
元 は ptracer プ ロ セ
ス が そ の プ ロ
セ ス が 直 接 の
プ ロ セ ス の 先
祖 で あ る か の
よ う 呼 び 出 し
た プ ロ セ ス を
ptrace で き る 、 と
宣 言 し て い る
と い う こ と だ
。 PR_SET_PTRACER 操 作 を
行 う 毎 に 、 直
前 の "ptracer プ ロ セ
ス ID" は 置 き か
え ら れ る 。 arg2
で PR_SET_PTRACER を 0 に 設
定 す る と 、 呼
び 出 し 元 の "ptracer
プ ロ セ ス ID" が
ク リ ア さ れ る
。 arg2 が PR_SET_PTRACER の
場 合 、 Yama が 導 入
し た ptrace の 制 限 は
呼 び 出 し 元 プ
ロ セ ス に 対 し
て は 無 効 に な
る 。 詳 し い 情
報 は 、 カ ー ネ
ル ソ ー ス フ ァ
イ ル Documentation/security/Yama.txt
を 参 照 。
PR_SET_SECCOMP (Linux 2.6.23 以 降 )
呼 び 出 し た ス
レ ッ ド の セ キ
ュ ア コ ン ピ ュ
ー テ ィ ン グ (seccomp)
モ ー ド を 設 定
す る 。 最 近 の
seccomp(2) シ ス テ ム
コ ー ル は PR_SET_SECCOMP
の 上 位 互 換 の
機 能 を 提 供 す
る 。
seccomp モ ー ド は arg2 で 指 定 で き る (seccomp 定 数 は <linux/seccomp.h> で 定 義 さ れ て い る )。
arg2 を SECCOMP_MODE_STRICT に 設 定 す る と 、 そ の ス レ ッ ド が 呼 び 出 し を 許 可 さ れ る シ ス テ ム コ ー ル は read(2), write(2), _exit(2), sigreturn(2) だ け に な る 。 そ れ 以 外 の シ ス テ ム コ ー ル を 呼 び 出 す と 、 シ グ ナ ル SIGKILL が 配 送 さ れ る 。 パ イ プ や ソ ケ ッ ト か ら 読 み 込 ん だ 、 信 頼 で き な い バ イ ト コ ー ド を 実 行 す る 必 要 が あ る 大 量 の 演 算 を 行 う ア プ リ ケ ー シ ョ ン に お い て 、 strict secure computing モ ー ド は 役 立 つ 。 こ の 操 作 は 利 用 で き る の は 、 カ ー ネ ル が CONFIG_SECCOMP を 有 効 に し て 作 成 さ れ て い る 場 合 だ け で あ る 。
arg2 を SECCOMP_MODE_FILTER (Linux 3.5 以 降 ) に 設 定 す る と 、 許 可 さ れ る シ ス テ ム コ ー ル は arg3 で 渡 さ れ た Berkeley Packet Filter へ の ポ イ ン タ ー で 定 義 さ れ る 。 こ の 引 き 数 は struct sock_fprog へ の ポ イ ン タ ー で あ る 。 こ れ は 任 意 の シ ス テ ム コ ー ル や シ ス テ ム コ ー ル 引 き 数 を フ ィ ル タ リ ン グ す る た め に 設 計 さ れ た 。 こ の モ ー ド は カ ー ネ ル で CONFIG_SECCOMP_FILTER が 有 効 に な っ て い る 場 合 に の み 利 用 可 能 で あ る 。
SECCOMP_MODE_FILTER フ ィ ル タ ー で fork(2) が 許 可 さ れ て い る 場 合 、 seccomp モ ー ド は fork(2) で 作 成 さ れ た 子 プ ロ セ ス に 継 承 さ れ る 。 execve(2) が 許 可 さ れ て い る 場 合 、 seccomp モ ー ド は execve(2) の 前 後 で 維 持 さ れ る 。 フ ィ ル タ ー で prctl() コ ー ル が 許 可 さ れ て い る 場 合 、 追 加 で フ ィ ル タ ー が 定 義 さ れ 、 こ れ ら の フ ィ ル タ ー は 許 可 さ れ な い も の が 見 つ か る ま で 指 定 さ れ た 順 序 で 実 行 さ れ る 。 詳 し い 情 報 は 、 カ ー ネ ル ソ ー ス フ ァ イ ル Documentation/prctl/seccomp_filter.txt を 参 照 。
PR_GET_SECCOMP (Linux 2.6.23 以 降 ) 呼 び 出 し た ス レ ッ ド の secure computing モ ー ド を (関 数 の 結 果 と し て ) 返 す 。 呼 び 出 し た ス レ ッ ド が secure computing モ ー ド で な か っ た 場 合 、 こ の 操 作 は 0 を 返 し 、 呼 び 出 し た ス レ ッ ド が strict secure computing モ ー ド の 場 合 、 prctl() を 呼 び 出 す と シ グ ナ ル SIGKILL が そ の プ ロ セ ス に 送 信 さ れ る 。 呼 び 出 し た ス レ ッ ド が フ ィ ル タ モ ー ド で 、 こ の シ ス テ ム コ ー ル が seccomp フ ィ ル タ に よ り 許 可 さ れ て い る 場 合 、 2 を 返 し 、 そ う で な い 場 合 プ ロ セ ス は SIGKILL シ グ ナ ル で kill さ れ づ 。 こ の 操 作 が 利 用 で き る の は 、 カ ー ネ ル が CONFIG_SECCOMP を 有 効 に し て 作 成 さ れ て い る 場 合 だ け で あ る 。
Linux 3.8 以 降 で は 、 /proc/[pid]/status の seccomp フ ィ ー ル ド か ら も 同 じ 情 報 を 取 得 で き る 。 こ の 方 法 の 場 合 は プ ロ セ ス が kill さ れ る 危 険 は な い 。 proc(5) を 参 照 。
PR_SET_SECUREBITS (Linux
2.6.26 以 降 ) 呼 び 出
し た ス レ ッ ド
の "securebits" フ ラ グ
を arg2 で 渡 さ れ
た 値 に 設 定 す
る 。 capabilities(7) 参 照
。
PR_GET_SECUREBITS (Linux 2.6.26 以 降 )
呼 び 出 し た ス
レ ッ ド の "securebits"
フ ラ グ を (関 数
の 結 果 と し て )
返 す 。 capabilities(7) 参
照 。
PR_SET_THP_DISABLE (Linux 3.15 以 降 )
呼 び 出 し た ス
レ ッ ド の "THP disable"
(THP 無 効 ) フ ラ グ の
状 態 を 設 定 す
る 。 arg2 が 0 以 外
の 場 合 、 フ ラ
グ は 有 効 に な
り 、 そ う で な
い 場 合 は ク リ
ー ン さ れ る 。
こ の フ ラ グ を
設 定 す る 方 法
に よ り 、 コ ー
ド を 変 更 で き
な か っ た り
madvise(2) の malloc hook を が
有 効 で は な い
ジ ョ ブ (こ の 方
法 は 静 的 に 割
り 当 て ら れ た
デ ー タ に は 有
効 で は な い )に
対 し て 、 transparent huge pages
を 無 効 に す る
手 段 が 提 供 さ
れ る 。 "THP disable" フ
ラ グ の 設 定 は
fork(2) で 作 成 さ れ
た 子 プ ロ セ ス
に 継 承 さ れ 、
execve の 前 後 で 維
持 さ れ る 。
PR_GET_THP_DISABLE (Linux 3.15 以 降 )
呼 び 出 し 元 ス
レ ッ ド の "THP disable"
フ ラ グ の 現 在
の 設 定 を (関 数
の 結 果 と し て )
返 す 。 フ ラ グ
が セ ッ ト さ れ
て い る 場 合 は 1
が 、 セ ッ ト さ
れ て い な い 場
合 は 0 が 返 る 。
PR_GET_TID_ADDRESS (Linux 3.5 以 降 )
set_tid_address(2) や clone(2) CLONE_CHILD_CLEARTID フ ラ グ で 設 定 さ れ た clear_child_tid を 取 得 し 、 (int **) arg2 が 指 す 場 所 に 格 納 し て 返 す 。 こ の 機 能 は カ ー ネ ル が CONFIG_CHECKPOINT_RESTORE オ プ シ ョ ン を 有 効 に し て 作 成 さ れ て い る 場 合 に の み 利 用 で き る 。
PR_SET_TIMERSLACK (Linux 2.6.28 以 降 ) 呼 び 出 し 元 ス レ ッ ド の 現 在 の timer slack を arg2 で 指 定 さ れ た ナ ノ 秒 に 設 定 す る 。 arg2 が 0 以 下 の 場 合 、 現 在 の timer slack を そ の ス レ ッ ド の デ フ ォ ル ト の timer slack 値 に リ セ ッ ト す る 。 カ ー ネ ル は timer slack を 使 っ て 、 呼 び 出 し 元 ス レ ッ ド の タ イ マ ー 満 了 の う ち 、 ど の く ら い 近 い も の グ ル ー ピ ン グ す る (一 纏 め に す る ) か を 決 め る 。 そ の 結 果 、 そ の ス レ ッ ド の タ イ マ ー の 満 了 は 最 大 で 指 定 さ れ た ナ ノ 秒 分 だ け 遅 れ る 場 合 が あ る 。 タ イ マ ー 満 了 を グ ル ー ピ ン グ す る こ と で 、 CPU を 起 こ す 回 数 が 最 小 化 さ れ シ ス テ ム の 消 費 電 力 を 減 ら す こ と が で き る 。
timer slack の 影 響 を 受 け る の は 、 シ ス テ ム コ ー ル select(2), pselect(2), poll(2), ppoll(2), epoll_wait(2), epoll_pwait(2), clock_nanosleep(2), nanosleep(2), futex(2) に よ り 設 定 さ れ た タ イ マ ー 満 了 で あ る (ま た 、 futex を 使 っ て 実 装 さ れ て い る ラ イ ブ ラ リ 関 数 pthread_cond_timedwait(3), pthread_mutex_timedlock(3), pthread_rwlock_timedrdlock(3), pthread_rwlock_timedwrlock(3), sem_timedwait(3) も 影 響 を 受 け る )。
timer slack は リ ア ル タ イ ム ス ケ ジ ュ ー リ ン グ ポ リ シ ー で ス ケ ジ ュ ー リ ン グ さ れ る ス レ ッ ド に は 提 供 さ れ な い (sched_setscheduler(2) 参 照 )。 各 ス レ ッ ド に は timer slack に 関 連 す る 値 が 2 つ あ る 。 「 デ フ ォ ル ト 値 」 と 「 現 在 値 」 で あ る 。 現 在 値 は タ イ マ ー 満 了 の グ ル ー ピ ン グ を 制 御 す る 。 新 し い ス レ ッ ド が 作 成 さ れ る 際 、 2 つ の timer slack 値 は そ の ス レ ッ ド を 作 成 し た ス レ ッ ド の 現 在 値 と 同 じ に 設 定 さ れ る 。 そ の 後 、 ス レ ッ ド は PR_SET_TIMERSLACK で 現 在 の timer slack 値 を 調 整 で き る (デ フ ォ ル ト 値 は 変 更 で き な い )。 す べ て の プ ロ セ ス の 先 祖 と な る init (PID 1) の timer slack 値 は 50,000 ナ ノ 秒 (50 ミ リ 秒 ) で あ る 。 timer slack 値 は execve(2) の 前 後 で 保 持 さ れ る 。
PR_GET_TIMERSLACK (Linux
2.6.28 以 降 ) 呼 び 出
し 元 ス レ ッ ド
の 現 在 の タ イ
マ ー の ス ラ ッ
ク 値 を (関 数 の
結 果 と し て ) 返
す 。
PR_SET_TIMING (Linux 2.6.0−test4 以 降
)
(通 常 の 、 伝 統 的 に 使 わ れ て き た ) 統 計 的 な プ ロ セ ス タ イ ミ ン グ を 使 用 す る か 、 正 確 な タ イ ム ス タ ン プ に 基 づ く プ ロ セ ス タ イ ミ ン グ を 使 用 す る か を 設 定 す る 。 arg2 に 指 定 で き る 値 は PR_TIMING_STATISTICAL か PR_TIMING_TIMESTAMP で あ る 。 PR_TIMING_TIMESTAMP は 現 在 の と こ ろ 実 装 さ れ て い な い (こ の モ ー ド に 設 定 し よ う と す る と エ ラ ー EINVAL が 起 こ る こ と だ ろ う )。
PR_GET_TIMING (Linux
2.6.0−test4 以 降 ) 現 在
使 用 中 の プ ロ
セ ス タ イ ミ ン
グ を 決 め る 方
法 を (関 数 の 結
果 と し て ) 返 す
。
PR_TASK_PERF_EVENTS_DISABLE (Linux 2.6.31 以
降 ) 呼 び 出 し た
プ ロ セ ス に 接
続 さ れ た す べ
て の 性 能 カ ウ
ン タ ー を 無 効
に す る 。 カ ウ
ン タ ー が こ の
プ ロ セ ス に よ
り 作 成 さ れ た
か 他 の プ ロ セ
ス に よ り 作 成
さ れ た か は 関
係 な い 。 呼 び
出 し た プ ロ セ
ス が 他 の プ ロ
セ ス 用 に 作 成
し た 性 能 カ ウ
ン タ ー は 影 響
を 受 け な い 。
性 能 カ ウ ン タ
ー の 詳 細 に つ
い て は Linux カ ー ネ
ル ソ ー ス の
tools/perf/design.txt を 参 照
。 以 前 は
PR_TASK_PERF_COUNTERS_DISABLE と 呼
ば れ て い た 。 Linux
2.6.32 で 名 前 が 変 更
さ れ た (数 値 は
同 じ ま ま で あ
る )。
PR_TASK_PERF_EVENTS_ENABLE (Linux 2.6.31 以
降 )
PR_TASK_PERF_EVENTS_DISABLE の 逆 。 呼 び 出 し た プ ロ セ ス に 接 続 さ れ た 性 能 カ ウ ン タ ー を 有 効 に す る 。 以 前 は PR_TASK_PERF_COUNTERS_ENABLE と 呼 ば れ て い た 。 Linux 2.6.32 で 名 前 が 変 更 さ れ た 。
PR_SET_TSC (Linux 2.6.26
以 降 , x86 の み ) そ
の プ ロ セ ス が
タ イ ム ス タ ン
プ カ ウ ン タ ー
を 読 み 出 せ る
か を 決 定 す る
フ ラ グ の 状 態
を 設 定 す る 。
読 み 出 し を 許
可 す る 場 合 は
arg2 に PR_TSC_ENABLE を 、
そ の プ ロ セ ス
が タ イ ム ス タ
ン プ カ ウ ン タ
ー を 読 み 出 そ
う と し た 際 に
SIGSEGV を 発 生 さ せ
る 場 合 に は
PR_TSC_SIGSEGV を 渡 す 。
PR_GET_TSC (Linux 2.6.26 以 降 , x86
の み ) そ の プ ロ
セ ス が タ イ ム
ス タ ン プ カ ウ
ン タ ー を 読 み
出 せ る か を 決
定 す る フ ラ グ
の 状 態 を (int *) arg2
が 指 す 場 所 に
格 納 し て 返 す
。
PR_SET_UNALIGN
(ia64 で は Linux 2.3.48 以 降 ; parisc で は Linux 2.6.15 以 降 ; PowerPC で は Linux 2.6.18 以 降 ; Alpha で は Linux 2.6.22 以 降 ; こ れ ら の ア ー キ テ ク チ ャ ー の み ) unaligned ア ク セ ス 制 御 ビ ッ ト を arg2 で 指 定 さ れ た 値 に 設 定 す る 。 指 定 で き る 値 は PR_UNALIGN_NOPRINT (unaligned な ユ ー ザ ー ア ク セ ス を 黙 っ て 修 正 す る ) か PR_UNALIGN_SIGBUS (unaligned な ユ ー ザ ー ア ク セ ス が あ っ た 場 合 SIGBUS を 生 成 す る ) で あ る 。
PR_GET_UNALIGN
(バ ー ジ ョ ン と ア ー キ テ ク チ ャ ー の 情 報 は PR_SET_UNALIGN 参 照 ) unaligned ア ク セ ス 制 御 ビ ッ ト の 値 を (int *) arg2 が 指 す 場 所 に 格 納 し て 返 す 。
PR_MCE_KILL (Linux
2.6.32 以 降 ) 現 在 の
ス レ ッ ド の machine check
memory corruption kill ポ リ シ ー
を 設 定 す る 。
arg2 が PR_MCE_KILL_CLEAR の
場 合 、 こ の ス
レ ッ ド の memory corruption kill
ポ リ シ ー を ク
リ ア し 、 シ ス
テ ム 全 体 の デ
フ ォ ル ト 値 を
使 用 す る (シ ス
テ ム 全 体 の デ
フ ォ ル ト は
/proc/sys/vm/memory_failure_early_kill で
定 義 さ れ る 。
proc(5) 参 照 )。 arg2
が PR_MCE_KILL_SET の 場 合
、 ス レ ッ ド 固
有 の memory corruption kill ポ リ
シ ー を 使 用 す
る 。 こ の 場 合
、 arg3 に よ り こ
の ポ リ シ ー が
early kill (PR_MCE_KILL_EARLY か
、 late kill (PR_MCE_KILL_LATE) か
、 シ ス テ ム 全
体 の デ フ ォ ル
ト 値 (PR_MCE_KILL_DEFAULT) が
指 定 さ れ る 。 early
kill は 、 ハ ー ド ウ
ェ ア メ モ リ ー
破 壊 (corruption) が ス レ
ッ ド の ア ド レ
ス 空 間 内 で 検
出 さ れ る と す
ぐ に 、 そ の ス
レ ッ ド が SIGBUS シ
グ ナ ル を 受 信
す る こ と を 意
味 す る 。 late kill モ
ー ド で は 、 メ
モ リ ー 破 壊 が
起 こ っ た ペ ー
ジ に ア ク セ ス
し た 場 合 に の
み 、 そ の プ ロ
セ ス が kill さ れ る
。 SIGBUS シ グ ナ ル
の 詳 細 は sigaction(2)
を 参 照 。 こ の
ポ リ シ ー は 子
プ ロ セ ス に 継
承 さ れ る 。 未
使 用 の 残 り の
prctl() の 引 き 数 は
将 来 の 互 換 性
の た め 0 に し な
け れ ば な ら な
い 。
PR_MCE_KILL_GET (Linux 2.6.32 以 降 )
現 在 の プ ロ セ
ス 単 位 の machine check kill
ポ リ シ ー を 返
す 。 未 使 用 の
prctl() の 引 き 数 は
す べ て 0 に し な
け れ ば な ら な
い 。
PR_SET_MM (Linux 3.3 以 降 ) 呼
び 出 し た プ ロ
セ ス の カ ー ネ
ル メ モ リ ー マ
ッ プ デ ィ ス ク
リ プ タ ー の フ
ィ ー ル ド を 変
更 す る 。 こ れ
ら の フ ィ ー ル
ド は 通 常 カ ー
ネ ル と 動 的 リ
ン カ ー に よ り
設 定 さ れ る (詳
し い 情 報 は ld.so
を 参 照 )。 通 常
の ア プ リ ケ ー
シ ョ ン は こ の
機 能 を 利 用 す
べ き で は な い
。 し か し な が
ら 、 自 分 を 書
き 換 え る プ ロ
グ ラ ム な ど 、
プ ロ グ ラ ム が
自 分 自 身 の メ
モ リ ー マ ッ プ
を 変 更 す る の
が 有 用 な 場 面
も あ る 。 こ の
機 能 は カ ー ネ
ル が CONFIG_CHECKPOINT_RESTORE オ
プ シ ョ ン を 有
効 に し て 作 成
さ れ て い る 場
合 に の み 利 用
で き る 。 呼 び
出 し た プ ロ セ
ス は CAP_SYS_RESOURCE ケ ー
パ ビ リ テ ィ を
持 っ て い な け
れ ば な ら な い
。 arg2 の 値 に は
以 下 の い ず れ
か を 指 定 し 、
arg3 で そ の オ プ
シ ョ ン の 新 し
い 値 を 指 定 す
る 。
PR_SET_MM_START_CODE
プ ロ グ ラ ム テ
キ ス ト を 実 行
で き る ア ド レ
ス の 上 限 を 設
定 す る 。 対 応
す る メ モ リ ー
領 域 は 読 み 出
し 可 能 で 実 行
可 能 で な け れ
ば な ら な い が
、 書 き 込 み 可
能 だ っ た り 共
有 可 能 だ っ た
り し て は な ら
な い (詳 し い 情
報 は mprotect(2) と mmap(2)
参 照 )。
PR_SET_MM_END_CODE プ ロ グ ラ
ム テ キ ス ト を
実 行 で き る ア
ド レ ス の 下 限
を 設 定 す る 。
対 応 す る メ モ
リ ー 領 域 は 読
み 出 し 可 能 で
実 行 可 能 で な
け れ ば な ら な
い が 、 書 き 込
み 可 能 だ っ た
り 共 有 可 能 だ
っ た り し て は
な ら な い 。
PR_SET_MM_START_DATA 初 期 化 済
デ ー タ や 未 初
期 化 (bss) デ ー タ を
配 置 す る 領 域
の ア ド レ ス 上
限 を 指 定 す る
。 対 応 す る メ
モ リ ー 領 域 は
読 み 書 き 可 能
で な け れ ば な
ら な い が 、 実
行 可 能 だ っ た
り 共 有 可 能 だ
っ た り し て は
な ら な い 。
PR_SET_MM_END_DATA 初 期 化 済
デ ー タ や 未 初
期 化 (bss) デ ー タ を
配 置 す る 領 域
の ア ド レ ス 下
限 を 指 定 す る
。 対 応 す る メ
モ リ ー 領 域 は
読 み 書 き 可 能
で な け れ ば な
ら な い が 、 実
行 可 能 だ っ た
り 共 有 可 能 だ
っ た り し て は
な ら な い 。
PR_SET_MM_START_STACK ス タ ッ
ク の 開 始 ア ド
レ ス を 設 定 す
る 。 対 応 す る
メ モ リ ー 領 域
は 読 み 書 き 可
能 で な け れ ば
な ら な い 。
PR_SET_MM_START_BRK
brk(2) コ ー ル で 拡 張 で き る プ ロ グ ラ ム の ヒ ー プ 領 域 の ア ド レ ス 上 限 を 設 定 す る 。 こ の ア ド レ ス は 、 プ ロ グ ラ ム の 現 在 の デ ー タ セ グ メ ン ト の 最 終 ア ド レ ス よ り 大 き く な け れ ば な ら な い 。 ま た 、 変 更 後 の ヒ ー プ と デ ー タ セ グ メ ン ト の サ イ ズ を 合 わ せ た サ イ ズ が RLIMIT_DATA リ ソ ー ス リ ミ ッ ト を 超 え る こ と は で き な い (setrlimit(2) 参 照 )。
PR_SET_MM_BRK 現
在 の brk(2) 値 を 設
定 す る 。 こ の
ア ド レ ス の 要
件 は PR_SET_MM_START_BRK オ
プ シ ョ ン と 同
じ で あ る 。 以
下 の オ プ シ ョ
ン は Linux 3.5 以 降 で
利 用 で き る 。
PR_SET_MM_ARG_START プ ロ グ ラ
ム の コ マ ン ド
ラ イ ン を 配 置
す る ア ド レ ス
の 上 限 を 設 定
す る 。
PR_SET_MM_ARG_END プ ロ グ ラ
ム の コ マ ン ド
ラ イ ン を 配 置
す る ア ド レ ス
の 下 限 を 設 定
す る 。
PR_SET_MM_ENV_START プ ロ グ ラ
ム の 環 境 情 報
(environment) を 配 置 す る
ア ド レ ス の 上
限 を 設 定 す る
。
PR_SET_MM_ENV_END プ ロ グ ラ
ム の 環 境 情 報
(environment) を 配 置 す る
ア ド レ ス の 下
限 を 設 定 す る
。
PR_SET_MM_ARG_START, PR_SET_MM_ARG_END, PR_SET_MM_ENV_START, PR_SET_MM_ENV_END で 指 定 さ れ る ア ド レ ス は プ ロ セ ス の ス タ ッ ク 領 域 に 属 し て い る 必 要 が あ る 。 し た が っ て 、 こ れ ら の メ モ リ ー 領 域 は 読 み 書 き 可 能 で な け れ ば な ら な い 。 ま た 、 (カ ー ネ ル 設 定 に よ っ て は ) MAP_GROWSDOWN 属 性 が セ ッ ト さ れ て い な け れ ば な ら な い (mmap(2) 参 照 )。
PR_SET_MM_AUXV 新
し い 補 助 ベ ク
ト ル (auxiliary vector) を 設
定 す る 。 arg3 引
き 数 は ベ ク ト
ル の ア ド レ ス
を 指 定 し 、 arg4
は ベ ク ト ル の
サ イ ズ を 指 定
す る 。
PR_SET_MM_EXE_FILE
/proc/pid/exe シ ン ボ リ ッ ク リ ン ク を arg3 引 き 数 で 渡 さ れ た 新 し い 実 行 可 能 な フ ァ イ ル デ ィ ス ク リ プ タ ー を 指 す シ ン ボ リ ッ ク リ ン ク で 置 き 換 え る 。 フ ァ イ ル デ ィ ス ク リ プ タ ー は 通 常 の open(2) コ ー ル で 取 得 す べ き で あ る 。 シ ン ボ リ ッ ク リ ン ク を 変 更 す る に は 、 既 存 の 実 行 可 能 な メ モ リ ー 領 域 の す べ て を ア ン マ ッ プ す る 必 要 が あ る 。 こ れ に は カ ー ネ ル 自 身 が 作 成 し た 領 域 も 含 ま れ る (例 え ば 、 カ ー ネ ル は 通 常 ELF .text セ ク シ ョ ン に 少 な く と も 一 つ の 実 行 可 能 な メ モ リ ー 領 域 を 作 成 す る )。 二 つ 目 の 制 限 は 、 こ の よ う な 変 更 は プ ロ セ ス の 生 存 期 間 で 一 度 だ け 行 う こ と が で き る と い う 点 で あ る 。 一 度 変 更 を 行 っ た 後 で 変 更 を 行 お う と す る と 拒 否 さ れ る 。 こ の 動 作 は 、 シ ス テ ム 管 理 者 が 、 シ ス テ ム で 動 作 す る す べ て の プ ロ セ ス が 行 う 、 普 通 で な い シ ン ボ リ ッ ク リ ン ク の 変 更 を 監 視 す る の を 楽 に す る 。
PR_MPX_ENABLE_MANAGEMENT, PR_MPX_DISABLE_MANAGEMENT (Linux 3.19 以 降 )
Memory Protection eXtensions (MPX) の 境 界 テ ー ブ ル (bounds table) の カ ー ネ ル 管 理 の 有 効 化 /無 効 化 を 行 う 。 引 き 数 arg2, arg3, arg4, arg5 は 0 で な け れ ば な ら な い 。
MPX は 、 ポ イ ン タ ー の 境 界 チ ェ ッ ク を 行 う ハ ー ド ウ ェ ア 支 援 機 構 で あ る 。 こ の 機 能 は 、 境 界 情 報 を 格 納 す る レ ジ ス タ ー 群 と 、 境 界 チ ェ ッ ク を ど の 命 令 に 課 す か を CPU に 教 え る た め の 特 別 な 命 令 プ レ フ ィ ッ ク ス の 集 合 で 構 成 さ れ る 。 こ れ ら の レ ジ ス タ ー 数 は 限 ら れ て お り 、 レ ジ ス タ ー 数 よ り も 多 く の ポ イ ン タ ー が あ る 場 合 に は 、 そ の 内 容 を テ ー ブ ル 群 に 退 避 す る (spilled) 必 要 が あ る 。 こ れ ら の テ ー ブ ル 群 は 「 境 界 テ ー ブ ル (bounds tables)」 と 呼 ば れ 、 MPX prctl 命 令 は カ ー ネ ル が こ れ ら の 割 り 当 て と 解 放 を 行 う か ど う か を 制 御 す る 。 管 理 が 有 効 に な っ て い る 場 合 、 カ ー ネ ル が 境 界 テ ー ブ ル の 割 り 当 て と 解 放 を 担 当 す る 。 最 初 に 存 在 し な い 境 界 テ ー ブ ル を 使 お う と し た 際 に 上 が る #BR 例 外 を 捕 捉 し 、 ユ ー ザ ー 空 間 に 例 外 を 配 送 せ ず に 、 テ ー ブ ル の 割 り 当 て を 行 い 、 新 し い テ ー ブ ル に 境 界 情 報 (bounds directory) を 書 き 込 む 。 解 放 に 関 し て は 、 カ ー ネ ル が 割 り 当 て ら れ て い な い メ モ リ ー に 対 応 す る 境 界 テ ー ブ ル が 存 在 す る か を 確 認 し 、 そ う で あ れ ば 解 放 を 行 う 。
PR_MPX_ENABLE_MANAGEMENT を 使 っ て MPX 管 理 を 有 効 に す る 前 に 、 ア プ リ ケ ー シ ョ ン は ま ず 境 界 情 報 管 理 用 の ユ ー ザ ー 空 間 バ ッ フ ァ ー を 割 り 当 て 、 そ の 管 理 情 報 の 場 所 を bndcfgu レ ジ ス タ ー に 設 定 し な け れ ば な ら な い 。
CPU や カ ー ネ ル が MPX を サ ポ ー ト し て い な い 場 合 、 こ れ ら の 呼 び 出 し は 失 敗 す る 。 カ ー ネ ル に よ る MPX の サ ポ ー ト は CONFIG_X86_INTEL_MPX 設 定 オ プ シ ョ ン で 有 効 に で き る 。 CPU が MPX を サ ポ ー ト し て い る か を 確 認 す る に は 、 以 下 の よ う に ’mpx’ CPUID ビ ッ ト を 見 れ ば よ い 。
cat /proc/cpuinfo | grep ’ mpx ’
MPX が 有 効 に な っ て い る 間 は 、 ス レ ッ ド は ロ ン グ (64 ビ ッ ト ) モ ー ド の オ ン /オ フ の 切 り 替 え は で き な い 。 プ ロ セ ス 内 の す べ て の ス レ ッ ド が こ れ ら の 呼 び 出 し の 影 響 を 受 け る 。
fork(2) で 作 成 さ れ た 子 プ ロ セ ス は MPX 管 理 の 状 態 を 継 承 す る 。 execve(2) の 中 で 、 MPX 管 理 は PR_MPX_DISABLE_MANAGEMENT が 呼 ば れ た 場 合 と 同 じ 状 態 が リ セ ッ ト さ れ る 。
Intel MPX に つ い て の 詳 し い 情 報 は 、 カ ー ネ ル ソ ー ス フ ァ イ ル Documentation/x86/intel_mpx.txt を 参 照 。
返 り 値
成 功 す る と 、 PR_GET_DUMPABLE, PR_GET_KEEPCAPS, PR_GET_NO_NEW_PRIVS, PR_GET_THP_DISABLE, PR_CAPBSET_READ, PR_GET_TIMING, PR_GET_TIMERSLACK, PR_GET_SECUREBITS, PR_MCE_KILL_GET, PR_GET_SECCOMP は 上 述 の 負 で な い 値 を 返 す (な お 、 PR_GET_SECCOMP は 返 ら な い 場 合 も あ る )。 option が 他 の 値 の 場 合 は 成 功 時 に 0 を 返 す 。 エ ラ ー の 場 合 、 −1 を 返 し 、 errno に 適 切 な 値 を 設 定 す る 。
エ ラ ー
EFAULT |
arg2 が 不 正 な ア ド レ ス で あ る 。 | ||
EFAULT |
option が PR_SET_SECCOMP で 、 arg2 が SECCOMP_MODE_FILTER で 、 カ ー ネ ル が CONFIG_SECCOMP_FILTER を 有 効 に し て 作 成 さ れ て お り 、 arg3 が 無 効 な ア ド レ ス で あ る 。 | ||
EINVAL |
option の 値 が 理 解 で き な い 。 | ||
EINVAL |
option が PR_MCE_KILL, PR_MCE_KILL_GET, PR_SET_MM の い ず れ か で 、 か つ 未 使 用 の prctl() 引 き 数 に 0 が 指 定 さ れ て い な か っ た 。 | ||
EINVAL |
arg2 が 指 定 さ れ た option で 有 効 な 値 で は な い 。 | ||
EINVAL |
option が PR_SET_SECCOMP か PR_GET_SECCOMP だ が 、 カ ー ネ ル が CONFIG_SECCOMP を 有 効 に し て 作 成 さ れ て い な か っ た 。 | ||
EINVAL |
option が PR_SET_SECCOMP で 、 arg2 が SECCOMP_MODE_FILTER で 、 カ ー ネ ル が CONFIG_SECCOMP を 有 効 に し て 作 成 さ れ て い な か っ た 。 | ||
EINVAL |
option が PR_SET_MM で 、 以 下 の い ず れ か が 真 で あ る 。 |
*
arg4 が arg5 で 0 以 外 で あ る 。 | |||
* |
arg3 が TASK_SIZE よ り も 大 き い (TASK_SIZE は こ の ア ー キ テ ク チ ャ ー で ユ ー ザ ー 空 間 ア ド レ ス ス ペ ー ス の 最 大 サ イ ズ で あ る )。 | ||
* |
arg2 が PR_SET_MM_START_CODE, PR_SET_MM_END_CODE, PR_SET_MM_START_DATA, PR_SET_MM_END_DATA, PR_SET_MM_START_STACK の ど れ か で 、 対 応 す る メ モ リ ー 領 域 の ア ク セ ス 許 可 が 要 件 を 満 た し て い な い 。 | ||
* |
arg2 が PR_SET_MM_START_BRK か PR_SET_MM_BRK で 、 arg3 デ ー タ セ グ メ ン ト の 末 尾 と 同 じ か そ れ よ り 前 か 、 arg3 に RLIMIT_DATA リ ソ ー ス リ ミ ッ ト を 超 え て し ま う よ う な 値 が 指 定 さ れ て い る 。 | ||
EINVAL |
option が PR_SET_PTRACER で arg2 が 0, PR_SET_PTRACER_ANY, 既 存 プ ロ セ ス の PID の い ず れ で も な い 。
EINVAL |
option が PR_SET_PDEATHSIG で 、 arg2 で 指 定 さ れ た 値 は 無 効 な シ グ ナ ル 番 号 で あ る 。 | ||
EINVAL |
option が PR_SET_DUMPABLE で 、 arg2 が SUID_DUMP_DISABLE で も SUID_DUMP_USER で も な い 。 | ||
EINVAL |
option が PR_SET_TIMING で 、 arg2 が PR_TIMING_STATISTICAL で は な い 。 | ||
EINVAL |
option が PR_SET_NO_NEW_PRIVS で 、 arg2 が 1 以 外 か 、 arg3, arg4, arg5 の ど れ か が 0 で は な い 。 | ||
EINVAL |
option が PR_GET_NO_NEW_PRIVS で 、 arg2, arg3, arg4, arg5 の ど れ か が 0 で は な い 。 | ||
EINVAL |
option が PR_SET_THP_DISABLE で arg3, arg4, arg5 の ど れ か が 0 で は な い 。 | ||
EINVAL |
option が PR_GET_THP_DISABLE で arg2, arg3, arg4, arg5 の い ず れ が 0 で は な い 。 | ||
EPERM |
option が PR_SET_SECUREBITS で 、 呼 び 出 し 元 が ケ ー パ ビ リ テ ィ CAP_SETPCAP を 持 っ て い な い 。 ま た は 、 "locked" フ ラ グ を 解 除 し よ う と し た 。 ま た は 、 locked フ ラ グ が セ ッ ト さ れ て い る フ ラ グ を セ ッ ト し よ う と し た (capabilities(7) 参 照 )。 | ||
EPERM |
option が PR_SET_KEEPCAPS で 、 呼 び 出 し 元 の フ ラ グ SECURE_KEEP_CAPS_LOCKED が セ ッ ト さ れ て い る (capabilities(7) 参 照 )。 | ||
EPERM |
option が PR_CAPBSET_DROP で 、 呼 び 出 し 元 が ケ ー パ ビ リ テ ィ CAP_SETPCAP を 持 っ て い な い 。 | ||
EPERM |
option が PR_SET_MM で 、 呼 び 出 し 元 が ケ ー パ ビ リ テ ィ CAP_SYS_RESOURCE を 持 っ て い な い 。 | ||
EACCES |
option が PR_SET_MM、 か つ arg3 が PR_SET_MM_EXE_FILE で 、 フ ァ イ ル が 実 行 可 能 で は な い 。 | ||
EBUSY |
option が PR_SET_MM で 、 arg3 が PR_SET_MM_EXE_FILE で 、 /proc/pid/exe シ ン ボ リ ッ ク リ ン ク を 変 更 し よ う と し た が 、 禁 止 さ れ て い る 。 | ||
EBADF |
option が PR_SET_MM で 、 arg3 が PR_SET_MM_EXE_FILE で 、 arg4 で 渡 さ れ た フ ァ イ ル デ ィ ス ク リ プ タ ー が 有 効 で は な い 。 | ||
ENXIO |
option が PR_MPX_ENABLE_MANAGEMENT か PR_MPX_DISABLE_MANAGEMENT で 、 カ ー ネ ル か CPU が MPX の 管 理 を サ ポ ー ト し て い な い 。 カ ー ネ ル と プ ロ セ ス が MPX を サ ポ ー ト し て い る か 確 認 す る こ と 。 |
バ ー ジ ョ ン
prctl() シ ス テ ム コ ー ル は Linux 2.1.57 で 導 入 さ れ た 。
準 拠
こ の コ ー ル は Linux 特 有 で あ る 。 IRIX に は prctl() シ ス テ ム コ ー ル が あ る が (MIPS ア ー キ テ ク チ ャ ー に お い て irix_prctl と し て Linux 2.1.44 で 同 様 に 導 入 さ れ た )、 そ の プ ロ ト タ イ プ は
ptrdiff_t prctl(int option, int arg2, int arg3); で あ る 。 ユ ー ザ ー 当 り の プ ロ セ ス 最 大 数 を 取 得 す る オ プ シ ョ ン 、 プ ロ セ ス の 使 用 で き る 最 大 プ ロ ッ サ ー 数 を 取 得 す る オ プ シ ョ ン 、 現 在 特 定 の プ ロ セ ス が 停 止 (block)さ せ ら れ て い る か ど う か 調 べ る オ プ シ ョ ン 、 ス タ ッ ク サ イ ズ の 最 大 値 の 取 得 や 設 定 を 行 な う オ プ シ ョ ン な ど が あ る 。
関 連 項 目
こ の 文 書 に つ い て
こ の man ペ ー ジ は Linux man−pages プ ロ ジ ェ ク ト の リ リ ー ス 3.79 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は http://www.kernel.org/doc/man−pages/ に 書 か れ て い る 。