(๋ด ๋ฌธ์ ์ค๋ช ์ golang์ผ๋ก ์์ํ์ง๋ง ์ค์ ๋ก๋ C ๋ฌธ์ ์ ๋๋ค. ์๋ ์ฐธ์กฐ)
๋๋ ์ค๋ ๋ด amd64 ์์คํ ์์ ScmpFilter.AddArch(seccomp.ArchPPC)๋ฅผ ์คํํ๋ ๋ช ๊ฐ์ง ๋จ์ ํ ์คํธ๋ฅผ ์์ฑํ๊ณ ์์์ต๋๋ค. ์ด๊ฒ์ ์ค๋ฅ๋ฅผ ๋ฐํํ์ง ์์์ง๋ง ์ํคํ ์ฒ๊ฐ ํํฐ์ ์ถ๊ฐ๋์ง ์์์ต๋๋ค(exportPFC๋ฅผ ํตํด ๋ณผ ์ ์์).
๋ค์์ ๊ฐ๋จํ ์ฌ์๊ธฐ์ ๋๋ค(amd64 ๋๋ i386์์ ์คํํด์ผ ํจ).
package main
import (
"os"
"github.com/seccomp/libseccomp-golang"
)
func main() {
secFilter, err := seccomp.NewFilter(seccomp.ActKill)
if err != nil {
panic(err)
}
err = secFilter.AddArch(seccomp.ArchPPC)
if err != nil {
panic(err)
}
secFilter.ExportPFC(os.Stdout)
}
์ฝ๊ฐ์ ๋๋ฒ๊น ํ์ ์๋์ ๋ถ์ผ์น๊ฐ ์๋ ๊ฒฝ์ฐ seccomp_arch_add()๊ฐ EEXIST๋ฅผ ๋ฐํํ๋ ๊ฒ์ผ๋ก ๋ํ๋ฌ์ต๋๋ค. db.c:db_col_db_add()์๋ ๋ค์์ด ์์ต๋๋ค.
if (col->endian != 0 && col->endian != db->arch->endian)
return -EFAULT;
golang ์ฝ๋๋ ๋ด๊ฐ ๊ด์ฐฐํ ํ๋์ผ๋ก ์ด์ด์ง๋ EEXIST๋ฅผ (์ ๋นํ๊ฒ) ๋ฌด์ํฉ๋๋ค.
seccomp_arch_add()๊ฐ EINVAL ๊ฐ์ ๋ค๋ฅธ ์ค๋ฅ ์ฝ๋๋ฅผ ๋ฐํํ๋ค๋ ๊ฒ์ด ๋ง์ด ๋๋์ง ๊ถ๊ธํฉ๋๋ค. ์ด๊ฒ์ด ๋๋ฌด ์ํํ ๊ฒฝ์ฐ(๊ธฐ์กด ์์ฉ ํ๋ก๊ทธ๋จ์ ์ค๋จํ ์ ์์ผ๋ฏ๋ก) ๋ฌธ์ํํ๋ ๊ฒ์ด ์ข์ต๋๋ค. PR์ ์ ๊ณตํ๊ฒ ๋์ด ๊ธฐ์ฉ๋๋ค.
์ ๊ณ ํด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. ์์ธํ ์ดํด๋ด์ผ ํฉ๋๋ค.
@mvo5๋ก ๋์์ค๋ ๋ฐ ๋๋ฌด ์ค๋ ์๊ฐ์ด ๊ฑธ๋ ธ๋ค๋ ์ ์ ๋งค์ฐ ์ ๊ฐ์ค๋ฝ๊ฒ ์๊ฐํฉ๋๋ค. ์ํดํด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.
์ข ๋ช ํํ ํ๊ธฐ ์ํด ํ์ฌ ๊ด๋ จ db.c:db_col_db_add()๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
if (col->endian != 0 && col->endian != db->arch->endian)
return -EEXIST;
... ์๋ ๋ฌธ์ ๋ณด๊ณ ์์ ์ ๋ฒ์ ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ก์ปฌ๋ก ํจ์น๋ ๋ณต์ฌ๋ณธ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์ฆ, ์ฌ๊ธฐ์์ ๋ฐํ๋ ์ค๋ฅ๋ฅผ ๋ณ๊ฒฝํ๋ ๊ฒ์ด ํฉ๋ฆฌ์ ์ผ๋ก ๋ค๋ฆฝ๋๋ค. ์ฐ๋ฆฌ๋ ๋ค๋ฅธ ์์น/์๋์ ์ฝ๋ ์ค ์ ์ด๋ ์ผ๋ถ์์ EDOM์ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. ์ด๊ฒ์ด ํฉ๋ฆฌ์ ์ผ๋ก ๋ค๋ฆฝ๋๊น?
@mheon์ ์ด๋ป๊ฒ ์๊ฐํ์ธ์?
์ฐ๋ฆฌ๊ฐ ์๋ ๋์ db.c:db_col_merge()๋ ์ ๋ฐ์ดํธํด์ผ ํ ๊ฒ ๊ฐ์ต๋๋ค.
API์ ๊ด์ ์์ ๋ณด๋ฉด ๋ณ๊ฒฝํ๋ ๊ฒ์ด ํฉ๋ฆฌ์ ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์ค๋ฅ ์ฝ๋๋ฅผ ์ค๋ฒ๋ก๋ฉํ๋ ๊ฒ์ ํญ์ ๋๋ฒ๊น ์ ๋ฌธ์ ๊ฐ ๋ฉ๋๋ค.
libseccomp-golang ์ธก์์๋ ๋ถ์ ์ ์ธ ERRNO ๊ท์น์ด ์ ์ง๋๋ ํ ์ฝ๋ ๋ณ๊ฒฝ์ด ํ์ํ์ง ์์ต๋๋ค. ์ ์ค๋ฅ๊ฐ ๋ฌด์์ ์๋ฏธํ๋์ง ์ค๋ช ํ๊ธฐ ์ํด AddArch์ ๋ช ์ค์ ์ฃผ์์ ์ถ๊ฐํ๋ฉด API ๋ฌธ์๊ฐ ์์ฑ๋ฉ๋๋ค.
Travis๋ ์ฌ์ ํ ๋๋ฌด ์ค๋๋ ์ปค๋์ ์คํ ์ค์ด๋ฏ๋ก ํ ์คํธ #47์ด ๋ค์ ์คํจํ์ต๋๋ค. @pcmoore๊ฐ ์ผ๋ง ์ ์ ์ธ๊ธํ๋ฏ์ด ๋๋ ์ด๊ฒ์ ํผํ๊ธฐ ์ํด ํ ์คํธ์ ์ฝ๊ฐ์ ์๋ฆฌํจ์ ์ถ๊ฐํ๋ ค๊ณ ๋ ธ๋ ฅํ ๊ฒ์ ๋๋ค.
๊ทธ๋ ์ง ์์ผ๋ฉด ์ด ๋ณ๊ฒฝ ์ฌํญ์ ๋ค๋ฅธ ๋ชจ๋ ๊ฒ์ด ๋ด ์ฑ ์์ ์ข์ ๋ณด์ ๋๋ค.
@drakenclimber ์ ์๊ฐ์ 47๋ฒ์ด ์๋๋ผ 46๋ฒ ํ ์คํธ๋ฅผ
๋ช ๋ฌ ์ ์ ๋ผ์ด๋ธ ํ ์คํธ๋ฅผ ์ํ API ๋ ๋ฒจ ๊ฒ์ฌ๋ฅผ ์ถ๊ฐํ์ง๋ง bpf-sim ํ ์คํธ์๋ ํ์ํ์ง ์๋ค๊ณ ์๊ฐ ํฉ๋๋ค. ๊ทธ๋ ์ฃ ? bpf-sim ํ ์คํธ ๊ฐ ๊น๋ํ๊ฒ ์คํ๋๊ณ
Travis๋ ์์ ์คํ์ ๋ํด ํ ์คํธ #47(KILL_PROCESS)์์ ํ์คํ ํ ํ์ต๋๋ค. ๋๋ ๋ํ ์ค๋ ์์นจ์ ์จ์ ์ฑ ๊ฒ์ฌ๋ก ๋ณ๋์ ๋ธ๋์น๋ก ํธ์ํ์ ๋ master์ HEAD์์ ๋์ผํ ์คํจ๋ฅผ ๋ณด์์ต๋๋ค.
ํ ์คํธ 47-live-kill_process%%001-00001 ๊ฒฐ๊ณผ: FAILURE 47-live-kill_process 3 KILL_PROCESS rc=12
๊ฝค ์ค๋์ ์ ์ด์ผ๊ธฐ๋ฅผ ํด์ ๊ธฐ์ต์ด ํ๋ฆฟํ ์ ์์ง๋ง, Travis์ ์ปค๋์ด 4.14๋ณด๋ค ์ด์ ๋ฒ์ ์ด๊ธฐ ๋๋ฌธ์ Travis๊ฐ KILL_PROCESS ํ ์คํธ์ ๋ฌธ์ ๊ฐ ์๋ค๊ณ ์๊ฐํ์ต๋๋ค. ๊ทธ ๊ธฐ๋ฅ์ด ๋์ ๋์์ ๋์์ต๋๋ค.
์๋๋ฉด ๋ด๊ฐ ๋ฏธ์ณค๋์ง... ์์ ํ ๊ธฐ์ต์ ๋ชปํ๋ ๊ฑด๊ฐ์?
ํ , ๊ฐ์ ๋ก๊ทธ๋ฅผ ๋ณด๊ณ ์๋ ๊ฑด๊ฐ์? ์๋ ๋น๋ ๋ฐ ๋ก๊ทธ๋ฅผ๋ณด๊ณ ์์ต๋๋ค.
... ๋ค์ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฌ์ค๋๋ค(์ฌ๊ธฐ์ "c" ํ ์คํธ๋ง ๋ณต์ฌํ์ผ๋ฉฐ "python" ๊ฒฐ๊ณผ๋ ๋์ผํจ).
batch name: 46-sim-kill_process
test mode: c
test type: bpf-sim
Test 46-sim-kill_process%%001-00001 result: ERROR 46-sim-kill_process rc=12
Test 46-sim-kill_process%%002-00001 result: ERROR 46-sim-kill_process rc=12
Test 46-sim-kill_process%%003-00001 result: ERROR 46-sim-kill_process rc=12
Test 46-sim-kill_process%%004-00001 result: ERROR 46-sim-kill_process rc=12
Test 46-sim-kill_process%%005-00001 result: ERROR 46-sim-kill_process rc=12
Test 46-sim-kill_process%%006-00001 result: ERROR 46-sim-kill_process rc=12
batch name: 47-live-kill_process
test mode: c
test type: live
Test 47-live-kill_process%%001-00001 result: SKIPPED (must specify live tests)
... ์, ์ด์ ์ปค๋์๋ ์ผ๋ถ ๋ผ์ด๋ธ ํ ์คํธ์ ๋ฌธ์ ๊ฐ ์์ง๋ง 9d4f7f69714d5af80309aa1b8a6d2c8300bb6730์์ ์์ ๋์ด์ผ ํฉ๋๋ค.
FWIW, ๋ง์คํฐ ๋ธ๋์น์ ๋ง์ง๋ง Travis ๋น๋๊ฐ ๊นจ๋ํ๊ฒ ์คํ๋์์ต๋๋ค.
Travis์์ ๋ชจ๋ ๊ฒ์ด "์ ์"์ธ์ง ํ์ธํ๊ธฐ ์ํด ๋ง์คํฐ ๋ถ๊ธฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ ๋น๋๋ฅผ ํธ๋ฆฌ๊ฑฐํ์ต๋๋ค.
๋๋ ์ง๊ธ _์ ๋ง_ ํผ๋์ค๋ฝ๋ค๋ ๊ฒ์ ์ธ์ ํฉ๋๋ค. ๊ทํ์ ๋งํฌ๋ ํ์คํ ํ ์คํธ # 46์ด ๋ฌธ์ ์์ ๋ณด์ฌ์ค๋๋ค. ๊ทธ๋ฌ๋ ์ค๋ฅธ์ชฝ ์๋จ ๋ชจ์๋ฆฌ์ ์๋ "Raw Log" ๋งํฌ๋ฅผ ํด๋ฆญํ๋ฉด #47์ด ์คํจํ๋ค๊ณ ์๋ ค์ค๋๋ค. ์์ ๋์ด๋ ๋งํฌ์ ๊ฒฝ์ฐ ์์ ๋ก๊ทธ๊ฐ ๋๋ฅผ ๋ฆฌ๋๋ ์ ํ ์์น๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๊ทธ๋์ ์์ธํ ๋ณด๋ฉด ์ฐ๋ฆฌ ๋ ๋ค ๋ง๋ ๊ฒ ๊ฐ์์.
ERROR
๋ฅผ ๋ฐํํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ #47์ FAILURE
๋ฐํํฉ๋๋ค(์ด๋ ๋ด๊ฐ ์๋ ๊ฒ์ํ ๊ฒ์
๋๋ค.)๊ทธ๋ฆฌ๊ณ ์ด๊ฒ์ ์์ฝ์์๋ ๋ณผ ์ ์์ต๋๋ค.
Regression Test Summary
tests run: 14090
tests skipped: 114
tests passed: 14090
tests failed: 0
tests errored: 12
Regression Test Summary
tests run: 16
tests skipped: 0
tests passed: 14
tests failed: 2
tests errored: 0
3.x ์ปค๋๋ก ๋ถํ ํ๋ฉด ๋ด ์์คํ ์ค ํ๋์์ TravisCI์ ๋ฌธ์ ๋ฅผ ์ฌํํ ์ ์์ต๋๋ค. ํ ์คํธ 46์ sys_chk_seccomp_action() ์์ ๋ฌธ์ ๊ฐ
๋๋ Test 47์ ๋ฌธ์ ๊ฐ ๋น์ทํ๋ค๊ณ ์์ํ๊ฒ ์ง๋ง, ๋๋ ๊ทธ ์คํจ ๊ฒฝ๋ก๋ฅผ ์กฐ์ฌํ์ง ์์๋ค. (๋น๋ก API๋ฅผ ํ์ธํ๊ธฐ ์ํด @pcmoore ๋ณ๊ฒฝ์ด ์ถ๊ฐ๋์ด ์ด๋ฅผ ๋ฐฉ์งํด์ผ ํ์ต๋๋ค. ํ ...)
Travis์์ ๋ฌด์์ด ์ด ๋ฌธ์ ๋ฅผ ์ผ๊ธฐํ๋์ง ๊ถ๊ธํฉ๋๋ค. ๊ทธ๋ค์ ์ ๋ง ์ค๋๋ ์ปค๋๋ก ๋์๊ฐ์ต๋๊น? ์ฐ๋ฆฌ ์ชฝ์์ ๋ญ๊ฐ?
์ด๊ฒ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด bpf-sim ํ ์คํธ์ ์ฝ๊ฐ์ ์ค๋งํธ๋ฅผ ์ถ๊ฐํด์ผ ํ ๊ฒ ๊ฐ์ต๋๋ค. *.tests ํ์ผ์ ์ถ๊ฐ๋ API ์ด์ ๋ชจ๋ฐฉํ์๊ฒ ์ต๋๊น? ์๋๋ฉด ์์ ํ ๋ค๋ฅธ ์์ ์ ์ํํ์๊ฒ ์ต๋๊น?
์, ์ ์ง๊ธ์ ์๋ํ์ง ์๋์ง ์ ๋ง ํผ๋์ค๋ฝ์ต๋๋ค. ์์ฆ ์ฐ๋ถํฌ 14.xx๊ฐ ์ ๋ง ๊ตฌ์์ด๋ผ Travis์์ ์ต์ ๋ฒ์ ์ด ์๋์ง ์ฐพ์๋ด์ผ๊ฒ ์ต๋๋ค.
Ubuntu 16.04(Xenial)๋ฅผ ์ฌ์ฉํ ์ ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ์๋ํด ๋ณด๊ฒ ์ต๋๋ค.
Commit 06f63ba691cb9df119c6759e8f0a150a2a9cbe69๋ Ubuntu 16.04๊น์ง ์ฌ๋ผ๊ฐ๋๋ค. ์ด ์ค์์น๋ฅผ ๊ฐ์ ์คํํ๊ณ ์ถ๊ธฐ ๋๋ฌธ์ PR์ด ์๋ ๋ง์คํฐ ๋ธ๋์น์์ ์ด ์์ ์ ์ํํ๊ณ ์์ต๋๋ค. ๋น๋๊ฐ ์ค๋จ๋๋ฉด ์์ ํ๊ฒ ์ต๋๋ค.
๊ทธ ๋น๋๋ ํ ์คํธ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ๊ฒ ๊ฐ์์ง๋ง, clang์ ์ค๋ฅ ์ฒ๋ฆฌ ์ฝ๋ ๊ฒฝ๋ก์์ ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ๋ฐ๊ฒฌํ์ต๋๋ค. ์ ์ ํ์ ์์ ํ๊ฒ ์ต๋๋ค.
์์ฒญ๋! ๋์์ ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค, @pcmoore
์ข์, ์ปค๋ฐ f8854f990004e71ccb9955c33d88d82cdb97ea42๋ฅผ ์ฌ์ฉํ๋ฉด ๊นจ๋ํ ๊ฑด๋ฌผ ๋ง์คํฐ ๋ธ๋์น๊ฐ ์์ด์ผ ํฉ๋๋ค. ์ง๊ธ ๋ฉ์ธ ๋น๋๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ๋ด ๊ฐ์ธ ์ง์ ์์ ์ ์๋ํ์ต๋๋ค.
@drakenclimber ์์ ๋ฌธ์ ๋ก๊ทธ์์ ์ด์ ๋ํ ํจ์น๊ฐ ์ค๋น๋ ๊ฒ์ ๋ณด์์ง๋ง ์์ง PR์ ๋ณผ ์ ์์ต๋๋ค. ์ฌ์ ํ ํจ์น์ ๊ด๋ จ๋ ๋ช ๊ฐ์ง ๋ฌธ์ ๋ฅผ ์ถ์ ํ๊ณ ์์ต๋๊น ์๋๋ฉด PR์ ์ํ ์ค๋น๊ฐ ๋์ด ์์ต๋๊น?
์ด๊ฒ์ ์ปค๋ฐ 4a35b6ea6f7c836734536420c50a2745a9e24c69๋ก ํด๊ฒฐ๋์ด์ผ ํ๋ฉฐ ์ง๊ธ ์ข ๋ฃํด์ผ ํฉ๋๋ค. ๋๊ตฐ๊ฐ ์ด ๋ฌธ์ ๋ฅผ ๋ฐ๊ฒฌํ๋ฉด ์ด ๋ฌธ์ ๋ฅผ ๋ค์ ์ด๊ฑฐ๋ ์ ๋ฌธ์ ๋ฅผ ๋ง๋์ญ์์ค.