Libseccomp: RFE: ์•Œ ์ˆ˜ ์—†๋Š” ์‹œ์Šคํ…œ ํ˜ธ์ถœ ๊ตฌ๋ณ„

์— ๋งŒ๋“  2020๋…„ 08์›” 16์ผ  ยท  18์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: seccomp/libseccomp

systemd-devel ์— ๋Œ€ํ•œ ํ† ๋ก ( 6์›” ๋ฐ 8์›” )์— ์˜ํ•ด ์ด‰๋ฐœ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

systemd-nspawn์€ ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ์— ์—†๋Š” ์‹œ์Šคํ…œ ํ˜ธ์ถœ์— ๋Œ€ํ•ด EPERM ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์€ openat2 ์™€ ๊ฐ™์€ ๊ฒฝ์šฐ์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ libc๋Š” ENOSYS ๋ฅผ ํ™•์ธํ•˜๊ณ  ๋‹ค๋ฅธ ๊ตฌํ˜„์œผ๋กœ ๋Œ€์ฒดํ•ฉ๋‹ˆ๋‹ค.

'๋Œ€๋ถ€๋ถ„ ์˜ฌ๋ฐ”๋ฅธ' ์†”๋ฃจ์…˜์€ syscall ๋ฒˆํ˜ธ๊ฐ€ seccomp๊ฐ€ ๋นŒ๋“œ๋  ๋•Œ ์กด์žฌํ–ˆ๋˜ ์ •์˜๋œ syscall ๋ฒ”์œ„ ๋‚ด์— ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ฝ”๋„ˆ ์ผ€์ด์Šค๊ฐ€ ์žˆ๋‹ค๊ณ  ํ™•์‹ ํ•˜์ง€๋งŒ(์ผ๋ถ€ ์•„์น˜๊ฐ€ ์ด์ƒํ•œ ์ผ์„ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Œ), syscalls.csv ๋“ฑ์„ ๊ตฌ๋ฌธ ๋ถ„์„ํ•˜๋Š” ๋„๊ตฌ๊ฐ€ ์•Œ๋ ค์ง„ ์ตœ๋Œ€ ์‹œ์Šคํ…œ ํ˜ธ์ถœ ๋ฒˆํ˜ธ์— ๋Œ€ํ•ด ๊ฐ„๋‹จํ•œ #define ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์œ ์šฉํ•œ?

enhancement prioritmedium

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์œ„์˜ ๋…ผ์˜๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์—ฌ๊ธฐ ์žˆ๋Š” ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ๋žŒ๋“ค(๋ชจ๋‘?)์€ 11๋ฒˆ ๋ฌธ์ œ๊ฐ€ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ์˜ฌ๋ฐ”๋ฅธ ๋ฐฉ๋ฒ•์ด๋ผ๊ณ  ๋ฏฟ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ํ–ฅํ›„ ํ† ๋ก ์„ ์›๋ž˜ ๋ฌธ์ œ(#11)๋กœ ์˜ฎ๊ธฐ๊ธฐ ์œ„ํ•ด ์ด ๋ฌธ์ œ๋ฅผ ์ข…๋ฃŒํ•˜๋Š” ๋ฐ ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ์‚ฌ๋žŒ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

๋ชจ๋“  18 ๋Œ“๊ธ€

์•ˆ๋…•ํ•˜์„ธ์š” @srd424์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋‹น์‹ ์ด ์ด ๋ฌธ์ œ์—์„œ ๋ฌด์—‡์„ ์š”๊ตฌํ•˜๋Š”์ง€ ์ดํ•ดํ•˜๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค ... ํŠน์ • ์‹œ์Šคํ…œ ํ˜ธ์ถœ์ด ํ•ด๋‹น ์•„์น˜์— ๊ตฌํ˜„๋˜์—ˆ๋Š”์ง€ ์—ฌ๋ถ€์— ๊ด€๊ณ„์—†์ด libseccomp๊ฐ€ ์ฃผ์–ด์ง„ ์‹œ์Šคํ…œ ํ˜ธ์ถœ์— ๋Œ€ํ•ด "์•Œ๊ณ  ์žˆ๋Š”์ง€" ์—ฌ๋ถ€๋ฅผ ๊ธฐ๋ณธ์ ์œผ๋กœ ์•Œ๊ณ  ์‹ถ์–ดํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. /ABI ๋„ค?

๊ทธ๋ ‡๋‹ค๋ฉด seccomp_syscall_resolve_name(...) ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์›ํ•˜๋Š” ์ •๋ณด๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋ฐ˜ํ™˜ ๊ฐ’์ด __NR_SCMP_ERROR ์ด๋ฉด ์‹œ์Šคํ…œ ํ˜ธ์ถœ์ด libseccomp์— ์•Œ๋ ค์ง€์ง€ ์•Š๊ณ , ์–‘์ˆ˜์ด๋ฉด ๊ธฐ๋ณธ ์•„์น˜/ABI์— ์‹œ์Šคํ…œ ํ˜ธ์ถœ์ด ์กด์žฌํ•˜๊ณ , ์Œ์ˆ˜์ด๋ฉด ๊ธฐ๋ณธ ์•„์น˜/์— ์‹œ์Šคํ…œ ํ˜ธ์ถœ์ด ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์•„๋น„. ๊ทธ๊ฒŒ ๋‹น์‹ ์„ ์œ„ํ•ด ์ž‘๋™ํ•ฉ๋‹ˆ๊นŒ?

๊ทธ๊ฒƒ์€ ํ•„ํ„ฐ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค .. ์žฅํ™ฉํ•ฉ๋‹ˆ๋‹ค!

๋‚ด๊ฐ€ ํ•˜๊ณ  ์‹ถ์—ˆ๋˜ ๊ฒƒ์€ ํ•„ํ„ฐ ๊ทœ์น™์ด ์‹œ์Šคํ…œ ํ˜ธ์ถœ ๋ฒˆํ˜ธ๋ฅผ ์•Œ๋ ค์ง„ ๊ฐ€์žฅ ๋†’์€ ๋ฒˆํ˜ธ์™€ ๋น„๊ตํ•˜๋„๋ก ํ•˜๊ณ , ๋” ํฌ๋ฉด ENOSYS ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ , ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด EPERM ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค(ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ์— ์žˆ๋Š” ์‹œ์Šคํ…œ ํ˜ธ์ถœ์ด ์ฒ˜๋ฆฌ๋˜์—ˆ๋‹ค๊ณ  ๊ฐ€์ • ์ด์ „ ๊ทœ์น™์— ๋”ฐ๋ผ.)

๊ทธ๋Ÿฌ๋‚˜ seccomp_rule_add ์— ๋Œ€ํ•œ ์„ธ๋ถ€ ์ •๋ณด๋ฅผ ๋ณด๋ฉด ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์‹ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. syscall ๋ฒˆํ˜ธ๋Š” ํŠน๋ณ„ํžˆ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค. ์›์‹œ bpf ํ•„ํ„ฐ๊ฐ€ ์ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๋„๋ก ๊ตฌ์„ฑ๋  ์ˆ˜ ์žˆ์ง€๋งŒ ์ด๋Š” libseccomp์— ๋Œ€ํ•œ ๋ณด๋‹ค ์นจ์ž…์ ์ธ ๋ณ€๊ฒฝ์„ ์˜๋ฏธํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ์ œ ๊ธ‰์—ฌ ๋“ฑ๊ธ‰๋ณด๋‹ค ๋†’์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค!

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์—ฌ๋Ÿฌ ์‚ฌ์šฉ์ž์—๊ฒŒ ์›๋ž˜ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ธฐ ๋•Œ๋ฌธ์— libseccomp์— ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ธ ๊ธฐ๋Šฅ์ผ ์ˆ˜๋„ ์žˆ๊ณ  ๊ทธ๋ ‡์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์•ฝ๊ฐ„ ๋” ์ •๊ตํ•œ ๊ธฐ๋ณธ ์ž‘์—…์„ ์ƒ์„ฑํ•˜๋Š” ๋ฌธ์ œ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค(๊ทธ๋ƒฅ?).

๊ทธ๊ฒƒ์€ ํ•„ํ„ฐ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค .. ์žฅํ™ฉํ•ฉ๋‹ˆ๋‹ค!

๋ฌด์Šจ ๋ง์ธ์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค...? seccomp_syscall_resolve_name(...) ๋Œ€ํ•œ ํ˜ธ์ถœ์€ ์‹ค์ œ๋กœ ํ•„ํ„ฐ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š๊ณ  ๋‚ด๋ถ€ libseccomp syscall db๋ฅผ ์ฟผ๋ฆฌํ•˜์—ฌ syscall ํ•ด๊ฒฐ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ํ•œ ๋ฒˆ, ์ฒœ ๋ฒˆ ๋˜๋Š” ์ ˆ๋Œ€ ํ˜ธ์ถœํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ ํ•„ํ„ฐ๋Š” ์ •ํ™•ํžˆ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. :)

๋‚ด๊ฐ€ ํ•˜๊ณ  ์‹ถ์—ˆ๋˜ ๊ฒƒ์€ ํ•„ํ„ฐ ๊ทœ์น™์ด ์‹œ์Šคํ…œ ํ˜ธ์ถœ ๋ฒˆํ˜ธ๋ฅผ ์•Œ๋ ค์ง„ ๊ฐ€์žฅ ๋†’์€ ๋ฒˆํ˜ธ์™€ ๋น„๊ตํ•˜๋„๋ก ํ•˜๊ณ , ๋” ํฌ๋ฉด ENOSYS๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ , ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด EPERM์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค(ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ์— ์žˆ๋Š” ์‹œ์Šคํ…œ ํ˜ธ์ถœ์ด ์ด์ „ ๊ทœ์น™์— ์˜ํ•ด ์ฒ˜๋ฆฌ๋˜์—ˆ๋‹ค๊ณ  ๊ฐ€์ •).

์•Œ๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด์ œ ๋‹น์‹ ์ด ๋ฌด์—‡์„ ์š”๊ตฌํ•˜๋Š”์ง€ ์ดํ•ดํ•˜๊ธฐ ์‹œ์ž‘ํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์‹œ์Šคํ…œ ํ˜ธ์ถœ์ด libseccomp์— ๋Œ€ํ•ด ์•Œ ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ์ฝ”๋“œ๊ฐ€ ์•„๋‹Œ ํ•„ํ„ฐ ์ž์ฒด๊ฐ€ ํŠน์ • ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ๋ฅผ ์›ํ•ฉ๋‹ˆ๋‹ค(์œ„์˜ ์˜ˆ์—์„œ ENOSYS ๋ฐ˜ํ™˜). ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ทธ๊ฒŒ ๋‹ค์•ผ, ์•„๋‹ˆ๋ฉด ๋‚ด๊ฐ€ ๋‹ค์‹œ ๋ญ”๊ฐ€๋ฅผ ๋†“์น˜๊ณ  ์žˆ๋Š” ๊ฑธ๊นŒ?

์œ„์—์„œ ์–ธ๊ธ‰ํ•œ ๋‘ ๋ฒˆ์งธ ์Šค๋ ˆ๋“œ์˜ ์ด ๋Œ“๊ธ€ ์€ ์ €๋ฅผ ์›ƒ๊ฒŒ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค :+1:

๋‚˜๋Š” libseccomp์—์„œ ENOSYS ์ฒ˜๋ฆฌ์— ๋Œ€ํ•œ ํ† ๋ก ์„ ์—ด๋ ค๊ณ  ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค.
https://github.com/seccomp/libseccomp/issues/286 , ํ•˜์ง€๋งŒ ์•„๋งˆ ์•„๋‹ ๊ฒƒ์ž…๋‹ˆ๋‹ค
๋งค์šฐ ์ผ๊ด€์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค..

๋‹น์‹ ์ด ์–ธ๊ธ‰ํ•œ ์Šค๋ ˆ๋“œ๋ฅผ ์ฝ์€ ํ›„, ๋‚˜๋Š” ๊ฐ™์€ ํŽ˜์ด์ง€์— ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋ˆ„๊ตฐ๊ฐ€(libseccomp, nspawn, whoever)๊ฐ€ ENOSYS ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ์œผ๋ฉด glibc๋Š” ์ƒˆ๋กœ์šด ์‹œ์Šคํ…œ ํ˜ธ์ถœ(์˜ˆ: openat2 )์—์„œ ์ด์ „ ์‹œ์Šคํ…œ ํ˜ธ์ถœ(์˜ˆ: openat ๋กœ ํด๋ฐฑ์„ ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค. EPERM ๋ฅผ glibc์— ๋ฐ˜ํ™˜ํ•˜๋ฉด glibc๋Š” ํ˜ธ์ถœ์ด ํ—ˆ์šฉ๋˜์ง€ ์•Š์•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ณ  glibc๋Š” ํฌ๊ธฐํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์ด ํ˜ธ์˜ ์ดˆ๊ธฐ ๋…ผํ‰์„ ๊ณต์ •ํ•˜๊ฒŒ ๋ฐ”๊พธ์–ด ์“ด ๊ฒƒ์ž…๋‹ˆ๊นŒ?

๋‚˜๋Š” ๊ทธ ์š”๊ตฌ๊ฐ€ ํ•ฉ๋ฆฌ์ ์ด๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค. libseccomp๊ฐ€ ์ด๋Ÿฌํ•œ ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ถฉ์กฑํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ๋” ์ƒ๊ฐํ•ด์•ผ ํ•˜์ง€๋งŒ ํ˜„์žฌ๋กœ์„œ๋Š” ์ด์˜๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” ์ตœ์ข… ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐํšŒ๊ฐ€ ๋ถ„๋ช…ํžˆ ์žˆ์Šต๋‹ˆ๋‹ค.

RFE์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

๋ˆ„๊ตฐ๊ฐ€(libseccomp, nspawn, whoever)๊ฐ€ ENOSYS ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ์œผ๋ฉด glibc๋Š” ์ƒˆ๋กœ์šด ์‹œ์Šคํ…œ ํ˜ธ์ถœ(์˜ˆ: openat2 )์—์„œ ์ด์ „ ์‹œ์Šคํ…œ ํ˜ธ์ถœ(์˜ˆ: openat ๋กœ ํด๋ฐฑ์„ ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค. EPERM ๋ฅผ glibc์— ๋ฐ˜ํ™˜ํ•˜๋ฉด glibc๋Š” ํ˜ธ์ถœ์ด ํ—ˆ์šฉ๋˜์ง€ ์•Š์•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ณ  glibc๋Š” ํฌ๊ธฐํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์ด ํ˜ธ์˜ ์ดˆ๊ธฐ ๋…ผํ‰์„ ๊ณต์ •ํ•˜๊ฒŒ ๋ฐ”๊พธ์–ด ์“ด ๊ฒƒ์ž…๋‹ˆ๊นŒ?

๋„ค, ๋งž์Šต๋‹ˆ๋‹ค. systemd ์‚ฌ๋žŒ๋“ค์˜ ์˜๊ฒฌ์€ EPERM์ด ๊ฑฐ๋ถ€๋œ ์‹œ์Šคํ…œ ํ˜ธ์ถœ์— ๋Œ€ํ•ด ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ํ•ฉ๋ฆฌ์ ์ด๋ผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ์ตœ์ข… ์‚ฌ์šฉ์ž/๊ด€๋ฆฌ์ž์—๊ฒŒ "ํ—ˆ์šฉ๋˜์ง€ ์•Š์Œ"์„ ์ „๋‹ฌํ•˜๊ธฐ ๋•Œ๋ฌธ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ "์ƒˆ"์™€ "์ด์ „" ์‹œ์Šคํ…œ ํ˜ธ์ถœ์„ ๊ตฌ๋ณ„ํ•˜๊ณ  ์ธ์‹ํ•  ์ˆ˜ ์—†๋Š” ๋ชจ๋“  ๊ฒƒ์— ๋Œ€ํ•ด ENOSYS๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ์•„์ด๋””์–ด์ž…๋‹ˆ๋‹ค. ์„ฑ๋Šฅ์ƒ์˜ ์ด์œ ๋กœ BPF์˜ ๋ชจ๋“  ๋‹จ์ผ ์‹œ์Šคํ…œ ํ˜ธ์ถœ์„ ์—ด๊ฑฐํ•˜๊ณ  ํ…Œ์ŠคํŠธํ•˜๊ณ  ์‹ถ์ง€ ์•Š๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์•„ํ‚คํ…์ฒ˜๋‹น ์•Œ๋ ค์ง„ ์‹œ์Šคํ…œ ํ˜ธ์ถœ ์ˆ˜์— ๋Œ€ํ•œ ์ƒ์œ„ ์›Œํ„ฐ๋งˆํฌ๋ฅผ ์ถ”์ ํ•˜๋Š” ๊ฒƒ์ด "์ตœ์„ ์˜ ๋…ธ๋ ฅ" ๋ฐฉ๋ฒ•์ฒ˜๋Ÿผ ๋ณด์˜€์Šต๋‹ˆ๋‹ค.

docker, podman, lxc ๋“ฑ์ด seccomp ํ•„ํ„ฐ๋ง์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด์ ์„ ์–ป์„ ์ˆ˜ ์žˆ๋Š”์ง€ ์•Œ์•„๋ณด๋Š” ๊ฒƒ์ด ํฅ๋ฏธ๋กœ์šธ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋™์•ˆ ์ €๋Š” seccomp ์ด๋ฒคํŠธ์˜ ๋กœ๊น…์„ ํ—ˆ์šฉํ•˜๋Š” nspawn์šฉ ํŒจ์น˜๋ฅผ PRํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๋””๋ฒ„๊น…์ด ์กฐ๊ธˆ ๋” ์‰ฌ์›Œ์งˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ทธ ์š”๊ตฌ๊ฐ€ ํ•ฉ๋ฆฌ์ ์ด๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค. libseccomp๊ฐ€ ์ด๋Ÿฌํ•œ ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ถฉ์กฑํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ๋” ์ƒ๊ฐํ•ด์•ผ ํ•˜์ง€๋งŒ ํ˜„์žฌ๋กœ์„œ๋Š” ์ด์˜๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” ์ตœ์ข… ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐํšŒ๊ฐ€ ๋ถ„๋ช…ํžˆ ์žˆ์Šต๋‹ˆ๋‹ค.

RFE์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

@drakenclimber ์— ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ์ด ์š”์ฒญ์€ ํ•ฉ๋ฆฌ์ ์œผ๋กœ ๋“ค๋ฆฝ๋‹ˆ๋‹ค. ๊ฐ€๋Šฅํ•œ ์†”๋ฃจ์…˜์— ๋Œ€ํ•ด ์ƒ๊ฐํ•  ์‹œ๊ฐ„์ด ๋” ํ•„์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. :)

์•„์ฃผ ๊ธฐ๋ณธ์ ์ธ ์ˆ˜์ค€์—์„œ ์ด๊ฒƒ์€ RFE #11๊ณผ ์œ ์‚ฌํ•˜๋ฉฐ ๊ฒฐ๊ตญ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์— ๋”์ฐํ•˜์ง€ ์•Š์€ ๋ฐฉ์‹์œผ๋กœ ์ด๊ฒƒ์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ฐ€์žฅ ์‰ฌ์šด ๋ฐฉ๋ฒ•์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์€ ์ง€์›๋˜๋Š” ์ตœ๋Œ€ ์ปค๋„ API ๋ฒ„์ „์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. v5.8(๋ถ„๋ช…ํžˆ ํ† ํฐํ™”๋จ)๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๊ทธ ์ด์ƒ์— ๋Œ€ํ•œ ์ฃผ์–ด์ง„ ์ž‘์—…๊ณผ libseccomp๊ฐ€ ๋‚˜๋จธ์ง€๋ฅผ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. @srd424 ์—ฌ๋Ÿฌ๋ถ„์—๊ฒŒ ํšจ๊ณผ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

์•ˆ๋…•ํ•˜์„ธ์š”, ์ด๊ฒƒ์€ https://github.com/systemd/systemd/pull/16739 ์—์„œ๋„ ๋…ผ์˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์ง€์›๋˜๋Š” ์ตœ๋Œ€ ์ปค๋„ API ๋ฒ„์ „(์˜ˆ: v5.8(๋ถ„๋ช…ํžˆ ํ† ํฐํ™”๋จ))๊ณผ ๊ทธ ์ด์ƒ์— ๋Œ€ํ•ด ์ฃผ์–ด์ง„ ์ž‘์—…์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋‚˜๋จธ์ง€๋Š” libseccomp๊ฐ€ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. systemd/systemd-nspawn์—์„œ ๋ช…์‹œ์ ์œผ๋กœ ํ—ˆ์šฉ ๋ชฉ๋ก ๋ฐ ๊ฑฐ๋ถ€ ๋ชฉ๋ก์— ์žˆ๋Š” ๋ชจ๋“  ์‹œ์Šคํ…œ ํ˜ธ์ถœ์— ๋Œ€ํ•ด ์‚ฌ์šฉ์ž ์ง€์ • errno๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ  "์ง€์›๋˜๋Š” ์ปค๋„ API ๋ฒ„์ „"์˜ ๋‹ค๋ฅธ ์‹œ์Šคํ…œ ํ˜ธ์ถœ์— ๋Œ€ํ•ด์„œ๋Š” EPERM์„ ๋ฐ˜ํ™˜ํ•˜๊ณ  ์ƒˆ ๋ฒ„์ „์— ๋Œ€ํ•ด์„œ๋Š” ENOSYS๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

๊ตฌํ˜„์ด ๋„ˆ๋ฌด ๋ณต์žกํ•˜์ง€ ์•Š์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด amd64์˜ ๊ฒฝ์šฐ "์•Œ๋ ค์ง„" ์‹œ์Šคํ…œ ํ˜ธ์ถœ์€ n <= 181 || 186 <= n <= 235 || 237 <= n <= 334 || 424 <= n <= 439 ๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด๋Ÿฌํ•œ ํ‘œํ˜„์‹์€ syscall ํ…Œ์ด๋ธ”์—์„œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์œผ๋กœ ์‰ฝ๊ฒŒ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

94๋„ ๊ด€๋ จ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ค๋Š˜ ์•„์นจ์— ์นดํŽ˜์ธ์ด ๋ถ€์กฑํ•˜์ง€๋งŒ ENOSYS๋ฅผ ์ฒ˜๋ฆฌํ•˜๋ฉด ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ์œ„ํ•ด ํฐ ํ—ˆ์šฉ ๋ชฉ๋ก์„ ์ž‘์€ ๊ฑฐ๋ถ€ ๋ชฉ๋ก์œผ๋กœ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๊ตฌํ˜„์ด ๋„ˆ๋ฌด ๋ณต์žกํ•˜์ง€ ์•Š์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด amd64์˜ ๊ฒฝ์šฐ "์•Œ๋ ค์ง„" ์‹œ์Šคํ…œ ํ˜ธ์ถœ์€ n <= 181 || 186 <= n <= 235 || 237 <= n <= 334 || 424 <= n <= 439. ์ด๋Ÿฌํ•œ ํ‘œํ˜„์‹์€ ์‹œ์Šคํ…œ ํ˜ธ์ถœ ํ…Œ์ด๋ธ”์—์„œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์œผ๋กœ ์‰ฝ๊ฒŒ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•”์‹œํ•˜๋“ฏ์ด ์‹ค์ œ BPF๋Š” ์•„์น˜/ABI์™€ ์ปค๋„ ๋ฒ„์ „์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ์œ„์˜ x86_64 ์˜ˆ์—์„œ BPF๋Š” ๊ทธ๋ฆฌ ๋‚˜์˜์ง€ ์•Š์„ ๊ฒƒ์ด์ง€๋งŒ ๋‹ค๋ฅธ ์•„์น˜/๋ฒ„์ „์—์„œ๋Š” ๊ทธ๋ ‡๊ฒŒ ์šด์ด ์ข‹์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ , ์ด๊ฒƒ์€ ์ด์ œ ๋™์ผํ•œ ๊ฒƒ์„ ํšจ๊ณผ์ ์œผ๋กœ ์š”์ฒญํ•˜๋Š” ๋‘ ๊ฐ€์ง€ ๋ฌธ์ œ์ด๋ฏ€๋กœ ์šฐ๋ฆฌ๊ฐ€ ํ•˜๊ณ  ์‹ถ์–ดํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ... ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ์–ผ๋งˆ๋‚˜ ์‰ฌ์šธ ๊ฒƒ์ธ์ง€์— ๋Œ€ํ•ด ๋›ฐ์–ด์˜ค๋ฅด๊ธฐ ์‹œ์ž‘ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. )

94๋„ ๊ด€๋ จ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ผ์ข…์˜ ์˜ˆ, ์ผ์ข…์˜ ์•„๋‹ˆ์˜ค. ์—ฌ๊ธฐ์—๋Š” ๋ฒ”์œ„๊ฐ€ ํฌํ•จ๋˜์ง€๋งŒ #94๋Š” ํ˜ธ์ถœ์ž ์ง€์ • ์ธ์ˆ˜ ๋ฒ”์œ„์— ๊ด€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค(์—ฌ์ „ํžˆ ์šฐ๋ฆฌ๊ฐ€ ํ•˜๊ณ  ์‹ถ์€ ๊ฒƒ, PR์ด ์ข‹์ง€ ์•Š์€ ์‹œ๊ฐ„์— ๋“ค์–ด์™”๊ณ  API์— ์•ฝ๊ฐ„์˜ ์กฐ์ •์ด ํ•„์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค). ๋ฐ˜๋ฉด ์šฐ๋ฆฌ๊ฐ€ ๋งํ•˜๋Š” ๊ฒƒ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ž์ฒด์— ์˜ํ•ด ์ƒ์„ฑ๋˜๋Š” ์•”์‹œ์ ์œผ๋กœ ์ƒ์„ฑ๋œ syscall ๋ฒ”์œ„.

์˜ค๋Š˜ ์•„์นจ์— ์นดํŽ˜์ธ์ด ๋ถ€์กฑํ•˜์ง€๋งŒ ENOSYS๋ฅผ ์ฒ˜๋ฆฌํ•˜๋ฉด ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ์œ„ํ•ด ํฐ ํ—ˆ์šฉ ๋ชฉ๋ก์„ ์ž‘์€ ๊ฑฐ๋ถ€ ๋ชฉ๋ก์œผ๋กœ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์˜ˆ๋ฅผ ๋“ค์–ด systemd์™€ ๊ฐ™์€ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ๊ด€์ ์—์„œ "์ƒˆ๋กœ์šด" ์‹œ์Šคํ…œ ํ˜ธ์ถœ์„ ์ฐจ๋‹จํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ์˜ˆ ... ์šฐ๋ฆฌ๊ฐ€ ๊ฐ™์€ ๊ฒƒ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฉด :)

๋” ๊ตฌ์ฒด์ ์œผ๋กœ ๋งํ•˜๋ฉด .. ํ˜„์žฌ ํŠน์ • ์‹œ์Šคํ…œ ํ˜ธ์ถœ์„ _๋ณด์•ˆ์ ์œผ๋กœ_ ์ฐจ๋‹จํ•˜๋ ค๋Š” ์‚ฌ๋žŒ์€ ๋ˆ„๊ตฌ๋‚˜ ํ—ˆ์šฉ ๋ชฉ๋ก์— ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ์ตœ์‹  ์ปค๋„์—์„œ ์–ด๋–ค ์‹œ์Šคํ…œ ํ˜ธ์ถœ์„ ์ถ”๊ฐ€ํ• ์ง€ ํ™•์‹ ํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์•Œ ์ˆ˜ ์—†๋Š” ์‹œ์Šคํ…œ ํ˜ธ์ถœ์„ ์ž๋™์œผ๋กœ ์ฐจ๋‹จํ•˜๋„๋ก libseccomp๋ฅผ ์š”์ฒญํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ด๋Š” ๋Œ€์‹  ์ž‘์€ ๊ฑฐ๋ถ€ ๋ชฉ๋ก์œผ๋กœ ์•ˆ์ „ํ•˜๊ฒŒ ์ „ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๊นŒ?

๋” ๊ตฌ์ฒด์ ์œผ๋กœ ๋งํ•˜๋ฉด .. ํ˜„์žฌ ํŠน์ • ์‹œ์Šคํ…œ ํ˜ธ์ถœ์„ _๋ณด์•ˆ์ ์œผ๋กœ_ ์ฐจ๋‹จํ•˜๋ ค๋Š” ์‚ฌ๋žŒ์€ ๋ˆ„๊ตฌ๋‚˜ ํ—ˆ์šฉ ๋ชฉ๋ก์— ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ์ตœ์‹  ์ปค๋„์—์„œ ์–ด๋–ค ์‹œ์Šคํ…œ ํ˜ธ์ถœ์„ ์ถ”๊ฐ€ํ• ์ง€ ํ™•์‹ ํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์•Œ ์ˆ˜ ์—†๋Š” ์‹œ์Šคํ…œ ํ˜ธ์ถœ์„ ์ž๋™์œผ๋กœ ์ฐจ๋‹จํ•˜๋„๋ก libseccomp๋ฅผ ์š”์ฒญํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ด๋Š” ๋Œ€์‹  ์ž‘์€ ๊ฑฐ๋ถ€ ๋ชฉ๋ก์œผ๋กœ ์•ˆ์ „ํ•˜๊ฒŒ ์ „ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๊นŒ?

์ •๋ง ๋ฉ‹์ง„ ๊ธฐ๋Šฅ์ด ๋  ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์šฐ๋ฆฌ๊ฐ€ ๊ฑฐ๊ธฐ์— ๋„๋‹ฌํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ์ง„์‹ฌ์œผ๋กœ ๋ฐ”๋ž๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด Docker๋Š” ํ˜„์žฌ ํ—ˆ์šฉ ๋ชฉ๋ก์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฉฐ

์ด๋ ‡๊ฒŒ ํฐ ๋ชฉ๋ก์ด ์„ฑ๋Šฅ์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์€ ์–ด๋งˆ์–ด๋งˆํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. v2.5์—์„œ ์ถ”๊ฐ€ํ•œ ์ด์ง„ ํŠธ๋ฆฌ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ค์†Œ ์™„ํ™”๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋” ๊ตฌ์ฒด์ ์œผ๋กœ ๋งํ•˜๋ฉด .. ํ˜„์žฌ ํŠน์ • ์‹œ์Šคํ…œ ํ˜ธ์ถœ์„ _๋ณด์•ˆ์ ์œผ๋กœ_ ์ฐจ๋‹จํ•˜๋ ค๋Š” ์‚ฌ๋žŒ์€ ๋ˆ„๊ตฌ๋‚˜ ํ—ˆ์šฉ ๋ชฉ๋ก์— ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ์ตœ์‹  ์ปค๋„์—์„œ ์–ด๋–ค ์‹œ์Šคํ…œ ํ˜ธ์ถœ์„ ์ถ”๊ฐ€ํ• ์ง€ ํ™•์‹ ํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์•Œ ์ˆ˜ ์—†๋Š” ์‹œ์Šคํ…œ ํ˜ธ์ถœ์„ ์ž๋™์œผ๋กœ ์ฐจ๋‹จํ•˜๋„๋ก libseccomp๋ฅผ ์š”์ฒญํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ด๋Š” ๋Œ€์‹  ์ž‘์€ ๊ฑฐ๋ถ€ ๋ชฉ๋ก์œผ๋กœ ์•ˆ์ „ํ•˜๊ฒŒ ์ „ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๊นŒ?

์ด๊ฒƒ์ด ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. libseccomp์— ์•Œ๋ ค์ง€์ง€ ์•Š๊ณ  ์ฐจ๋‹จ ๋ชฉ๋ก ์ž‘์„ฑ์ž์—๊ฒŒ ์•Œ๋ ค์ง€์ง€ ์•Š์€ ๊ฒƒ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ๋‹ค๋ฅธ ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” libseccomp๊ฐ€ ๋‚ด๋ถ€์ ์œผ๋กœ ์ง€์›๋˜๋Š” ์‹œ์Šคํ…œ ํ˜ธ์ถœ์— ๋Œ€ํ•œ ๋” ๋ช…ํ™•ํ•œ ๊ทธ๋ฆผ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋”๋ผ๋„ ๊ฐœ๋…์  ๋ฌธ์ œ๊ฐ€ ์‚ฌ๋ผ์ง€์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

์ข‹์€ ์  - ์ž‘๋™ํ•˜๋ ค๋ฉด ์ปค๋„ ๋ฒ„์ „์œผ๋กœ ํƒœ๊ทธ๊ฐ€ ์ง€์ •๋œ ์ž˜ ์ •์˜๋œ ์„ธํŠธ๊ฐ€ ํ•„์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•ด ์•ฝ๊ฐ„ ๋…ผ์˜ ์ค‘์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๊ตฌํ˜„์ด ๋„ˆ๋ฌด ๋ณต์žกํ•˜์ง€ ์•Š์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด amd64์˜ ๊ฒฝ์šฐ "์•Œ๋ ค์ง„" ์‹œ์Šคํ…œ ํ˜ธ์ถœ์€ n <= 181 || 186 <= n <= 235 || 237 <= n <= 334 || 424 <= n <= 439. ์ด๋Ÿฌํ•œ ํ‘œํ˜„์‹์€ ์‹œ์Šคํ…œ ํ˜ธ์ถœ ํ…Œ์ด๋ธ”์—์„œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์œผ๋กœ ์‰ฝ๊ฒŒ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•”์‹œํ•˜๋“ฏ์ด ์‹ค์ œ BPF๋Š” ์•„์น˜/ABI์™€ ์ปค๋„ ๋ฒ„์ „์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ์œ„์˜ x86_64 ์˜ˆ์—์„œ BPF๋Š” ๊ทธ๋ฆฌ ๋‚˜์˜์ง€ ์•Š์„ ๊ฒƒ์ด์ง€๋งŒ ๋‹ค๋ฅธ ์•„์น˜/๋ฒ„์ „์—์„œ๋Š” ๊ทธ๋ ‡๊ฒŒ ์šด์ด ์ข‹์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ , ์ด๊ฒƒ์€ ์ด์ œ ๋™์ผํ•œ ๊ฒƒ์„ ํšจ๊ณผ์ ์œผ๋กœ ์š”์ฒญํ•˜๋Š” ๋‘ ๊ฐ€์ง€ ๋ฌธ์ œ์ด๋ฏ€๋กœ ์šฐ๋ฆฌ๊ฐ€ ํ•˜๊ณ  ์‹ถ์–ดํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ... ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ์–ผ๋งˆ๋‚˜ ์‰ฌ์šธ ๊ฒƒ์ธ์ง€์— ๋Œ€ํ•ด ๋›ฐ์–ด์˜ค๋ฅด๊ธฐ ์‹œ์ž‘ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. )

ํ…Œ์ด๋ธ”์€ ์ƒ๋‹นํžˆ ์—ฐ์†์ ์ž…๋‹ˆ๋‹ค.

>>> l = {int(s[1]):s[0] for s in (s.split() for s in open('syscalls-x86_64').readlines()) if len(s)>1}; x = np.array(sorted(l.keys())); np.diff(x)
array([ 1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
        1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
        1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
        1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
        1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
        1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
        1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
        1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
        1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
        1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
        1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  5,  1,  1,  1,  1,  1,
        1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
        1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
        1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  2,  1,  1,  1,  1,  1,  1,
        1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
        1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
        1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
        1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
        1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
        1,  1,  1,  1,  1,  1, 90,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
        1,  1,  1,  1,  1])
>>> l = {int(s[1]):s[0] for s in (s.split() for s in open('syscalls-alpha').readlines()) if len(s)>1}; x = np.array(sorted(l.keys())); np.diff(x)
array([ 1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
        1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
        1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
        1,  2,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
        1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
        1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
        1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  2,  1,
        1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
        1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  3,  1,  2,  1,  1,
        1,  1,  1,  2,  1,  1,  1,  3, 12,  3,  3,  1, 11,  1,  1,  1,  1,
        1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
        2,  1,  1,  1,  1,  1,  1,  5,  1,  1,  1,  1,  1,  1,  1,  1,  1,
        1,  1,  1,  1,  1,  1,  2,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
        1, 39,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
        1,  1,  1,  1,  2,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
        1,  1,  1,  1,  2,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
        1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
        1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  2,  1,  1,  1,  1,  1,
        1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  2,  1,  1,  1,  1,  3,  1,
        1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
        1,  1,  1,  1,  2,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
        1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
        1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
        1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
        1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
        1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
        1,  1,  1,  1,  1,  1,  2,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
        2,  1,  1,  1])
>>> l = {int(s[1]):s[0] for s in (s.split() for s in open('syscalls-arm').readlines()) if len(s)>1}; x = np.array(sorted(l.keys())); np.diff(x)
array([1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 3, 1, 1, 2, 1, 2, 3, 4,
       1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 2, 1, 2, 3, 1, 1,
       1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 2, 1, 1, 1, 3,
       1, 1, 1, 1, 1, 1, 2, 1, 3, 1, 1, 1, 1, 1, 3, 3, 1, 1, 2, 1, 1, 1,
       1, 2, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1])
>>> l = {int(s[1]):s[0] for s in (s.split() for s in open('syscalls-riscv64').readlines()) if len(s)>1}; x = np.array(sorted(l.keys())); np.diff(x)
array([  1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,
         1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,
         1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   2,   1,
         1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,
         1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,
         1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,
         1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,
         1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,
         1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,
         1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,
         1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,
         1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,
         1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,
         1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,
         1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,
         1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,
         1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,
         1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,
         1,   1,   1,   1,   1,   1,   1,   1,  16,   1,   1,   1,   1,
         1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,
         1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,
         1,   1,   1,   1,   1, 130,   1,   1,   1,   1,   1,   1,   1,
         1,   1,   1,   1,   1,   1,   1,   1])

https://github.com/systemd/systemd/pull/16819 ์—์„œ systemd-nspawn์— ๋Œ€ํ•œ "์•Œ๋ ค์ง„" ์‹œ์Šคํ…œ ํ˜ธ์ถœ ํ•„ํ„ฐ๋ฅผ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค https://github.com/systemd/systemd/pull/16819/commits/158e30ffd9355a7640a7276276eb9219b6c87914 ์—๋Š” ์ผ๋ถ€ libseccomp ์ƒ์„ฑ ํ”„๋กœ๊ทธ๋žจ ๋คํ”„๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ๋คํ”„๋Š” ๊ธธ๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๊ธฐ์—์„œ ๋ฐ˜๋ณตํ•˜์ง€ ์•Š๊ฒ ์ง€๋งŒ SCMP_FLTATR_CTL_OPTIMIZE๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ๋” ํšจ์œจ์ ์œผ๋กœ ๋งŒ๋“ค ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋” ๊ธธ๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ๋ฒ”์œ„ ๋น„๊ต๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด 50๋ฐฐ ๋” โ€‹โ€‹์งง๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐฉ๊ธˆ ์ด ์Šค๋ ˆ๋“œ๋ฅผ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค. ๋น„์Šทํ•œ ๋ผ์ธ์— ๋Œ€ํ•ด ์ƒ๊ฐํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ์ด๊ฒƒ์€ ํ™•์‹คํžˆ Docker/runc๋„ ํ•ด๊ฒฐํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ตœ๋Œ€ ์ปค๋„ ๋ฒ„์ „์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ด ์•„๋งˆ๋„ ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ํ”„๋กœํ•„ ์ž‘์„ฑ์ž(๋ฐ ์ปจํ…Œ์ด๋„ˆ ๋Ÿฐํƒ€์ž„)๊ฐ€ ์ˆœ์„œ์— ๋”ฐ๋ผ ์ถ”๊ฐ€๋œ ์‹œ์Šคํ…œ ํ˜ธ์ถœ์ด๋‚˜ ์ž‘์„ฑ ๋‹น์‹œ ์ตœ์‹  ์‹œ์Šคํ…œ ํ˜ธ์ถœ์„ ์ถ”์ ํ•  ํ•„์š”๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ํ”„๋กœํ•„.

์œ„์˜ ๋…ผ์˜๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์—ฌ๊ธฐ ์žˆ๋Š” ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ๋žŒ๋“ค(๋ชจ๋‘?)์€ 11๋ฒˆ ๋ฌธ์ œ๊ฐ€ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ์˜ฌ๋ฐ”๋ฅธ ๋ฐฉ๋ฒ•์ด๋ผ๊ณ  ๋ฏฟ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ํ–ฅํ›„ ํ† ๋ก ์„ ์›๋ž˜ ๋ฌธ์ œ(#11)๋กœ ์˜ฎ๊ธฐ๊ธฐ ์œ„ํ•ด ์ด ๋ฌธ์ œ๋ฅผ ์ข…๋ฃŒํ•˜๋Š” ๋ฐ ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ์‚ฌ๋žŒ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰