Libseccomp: ๋ฒ„๊ทธ: openmp์™€์˜ ํ˜ธํ™˜์„ฑ

์— ๋งŒ๋“  2017๋…„ 09์›” 02์ผ  ยท  19์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: seccomp/libseccomp

๋‹ค์ค‘ ์Šค๋ ˆ๋”ฉ์˜ ๋น„๊ฒฐ์ •์  ํŠน์„ฑ์œผ๋กœ ์ธํ•ด ๋””๋ฒ„๊ทธํ•˜๊ธฐ๊ฐ€ ์–ด๋ ต์ง€๋งŒ ์ œ ์ƒ๊ฐ์—๋Š” ์žฌํ˜„ ๊ฐ€๋Šฅํ•œ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค seccomp_omp.c.gz์— ๋„๋‹ฌํ•œ ๊ฒƒ -O0 -ggdb -fopenmp ํ•˜์—ฌ ํ”„๋กœ๊ทธ๋žจ์„ ์ปดํŒŒ์ผํ•ฉ๋‹ˆ๋‹ค.

ํ•˜๋‚˜์˜ ์Šค๋ ˆ๋“œ๋กœ ์‹คํ–‰ํ•˜๊ณ  ๊ธˆ์ง€๋œ ์‹œ์Šคํ…œ ํ˜ธ์ถœ์„ ์ˆ˜ํ–‰ํ•˜๋„๋ก ํ•˜๋ฉด ํ”„๋กœ๊ทธ๋žจ์ด ์˜ˆ์ƒ๋Œ€๋กœ ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค.

$ ./seccomp_omp -t 1 -k 0      
86195973
[1]    10103 invalid system call (core dumped)  ./seccomp_omp -t 1 -k 0

๊ทธ๋Ÿฌ๋‚˜ ๋” ๋งŽ์€ ์Šค๋ ˆ๋“œ๊ฐ€ ์ฃผ์–ด์ง€๋ฉด ์ž‘๋™์„ ๋ฉˆ์ถฅ๋‹ˆ๋‹ค.

$ ./seccomp_omp -t 2 -k 0
86198868
86195973
86200317
^C

ํ”„๋กœ๊ทธ๋žจ์€ ์ฃฝ์ง€ ์•Š๊ณ  ๊ทธ๋ƒฅ ์•„๋ฌด๊ฒƒ๋„ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. SIGSYS ์‹ ํ˜ธ์— ๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚ฌ๋Š”์ง€, ๊ทธ๋ฆฌ๊ณ  ์™œ ์ฒ˜๋ฆฌ๋˜์ง€ ์•Š๋Š”์ง€ ํ˜ผ๋ž€์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ libseccomp ๋ฌธ์ œ๊ฐ€ ์•„๋‹ ์ˆ˜๋„ ์žˆ์ง€๋งŒ, ์ €๋Š” ๊ทผ๋ณธ ์›์ธ์„ ๋””๋ฒ„๊น…ํ•  ์ˆ˜ ์žˆ์„ ๋งŒํผ ์ผ๋ฐ˜์ ์œผ๋กœ seccomp, ์‹ ํ˜ธ ๋ฐ ์Šค๋ ˆ๋”ฉ ์‹œ์Šคํ…œ์— ๋Šฅ์ˆ™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‹น์‹ ์ด ๊ทธ๊ฒƒ์„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

bug prioritmedium

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

์ฐธ๊ณ : ์•„์ง ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ๋ณด์ง€ ์•Š์•˜์œผ๋ฉฐ ์ž˜ ์ž‘์„ฑ๋œ ์„ค๋ช…์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ถ”์ธกํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์ค‘ ์Šค๋ ˆ๋“œ์˜ ํŠน์„ฑ์„ ๊ณ ๋ คํ•˜์—ฌ ์ปค๋„์— ํ•„ํ„ฐ๋ฅผ ๋กœ๋“œํ•˜๊ธฐ ์ „์— SCMP_FLTATR_CTL_TSYNC ํ•„ํ„ฐ ์†์„ฑ์„ true๋กœ ์„ค์ •ํ•ด ๋ณด์…จ์Šต๋‹ˆ๊นŒ?

์Šค๋ ˆ๋“œ๋กœ ๋ถ„ํ• ํ•˜๊ธฐ ์ „์— seccomp ํ•„ํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— SCMP_FLTATR_CTL_TSYNC ์„ค์ •ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ปค๋„์€ ์–ด์จŒ๋“  ๋ชจ๋“  ์Šค๋ ˆ๋“œ์— ํ•„ํ„ฐ๋ฅผ ์ ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(๊ทธ๋ฆฌ๊ณ  ๋ถ„๋ช…ํžˆ ๊ทธ๋ ‡๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค). ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์— SCMP_FLTATR_CTL_TSYNC ๋ฅผ ์ถ”๊ฐ€ํ•ด๋„ ์ฐจ์ด๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค(ํ˜„ํ•™์  ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ, btw๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด 100์ค„ ๋ฏธ๋งŒ).

์ข‹์•„์š”, ๊ทธ๋ƒฅ ์–ธ๊ธ‰ํ•˜๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค. ๋‹น์‹ ์ด ์ผ์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒํ•˜๊ณ ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋“ค๋ฆฝ๋‹ˆ๋‹ค (์ƒˆ ์Šค๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์ „์— ํ•„ํ„ฐ๋ฅผ ์„ค์ •ํ•˜์‹ญ์‹œ์˜ค). ์ข€ ๋” ์ง€์ผœ๋ด์•ผ ํ•˜๊ฒ ์ง€๋งŒ, ์กฐ๋งŒ๊ฐ„ ๊ทธ๋Ÿด ๊ธฐํšŒ๊ฐ€ ์—†์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ๋ป”๋ป”ํ•˜๊ฒŒ ์ž˜๋ชป๋œ ์ผ์„ ํ•˜๊ณ  ์žˆ์ง€ ์•Š๋‹ค๋Š” ํ™•์ธ๋งŒ์œผ๋กœ๋„ ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. ์ฒœ์ฒœํžˆํ•˜์„ธ์š”!

๋‹จ์ผ ์Šค๋ ˆ๋“œ ์˜ˆ์ œ ./seccomp_omp -t 1 -k 0 ์—์„œ openmp๋Š” ๋‹จ์ผ ์Šค๋ ˆ๋“œ๋งŒ ์‹คํ–‰๋  ๊ฒƒ์ž„์„ ์ธ์‹ํ•˜๋ฏ€๋กœ openmp๋Š” ๋‹ค์ค‘ ์Šค๋ ˆ๋“œ for ๋ฃจํ”„์—์„œ ์ผ๋ฐ˜์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๋Š” ๋™๊ธฐํ™”์˜ ๋Œ€๋ถ€๋ถ„์„ ์šฐํšŒํ•ฉ๋‹ˆ๋‹ค. ์ปค๋„์˜ seccomp_run_filters()์—์„œ ์ฒ˜๋ฆฌ๋œ ์‹œ์Šคํ…œ ํ˜ธ์ถœ์„ ๊ด€์ฐฐํ•˜์—ฌ ์ด๋ฅผ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ์ƒ๋Œ€๋กœ __NR_write()์— ๋Œ€ํ•œ ํ˜ธ์ถœ๊ณผ seccomp๊ฐ€ ์Šค๋ ˆ๋“œ๋ฅผ ์ข…๋ฃŒํ•˜๋„๋ก ์ปค๋„์— ์ง€์‹œํ•˜๋„๋ก ์œ ๋„ํ•˜๋Š” __NR_madvise()์— ๋Œ€ํ•œ ํ˜ธ์ถœ์„ ๋ณด์•˜์Šต๋‹ˆ๋‹ค.

๋‹ค์ค‘ ์Šค๋ ˆ๋“œ ์˜ˆ์ œ ./seccomp_omp -t 2 -k 0 ์—์„œ openmp๋Š” for ๋ฃจํ”„๋ฅผ ๋ณ‘๋ ฌํ™”ํ•˜๋ ค๊ณ  ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํ›จ์”ฌ ๋” ๋งŽ์€ openmp ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ํ™œ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ seccomp_run_filters()๋ฅผ ํ†ตํ•ด ์‹œ์Šคํ…œ ํ˜ธ์ถœ์„ ๋‹ค์‹œ ๋ณผ ๋•Œ ๋ถ„๋ช…ํ•ฉ๋‹ˆ๋‹ค. __NR_mmap(), __NR_mprotect(), __NR_clone(), __NR_futex() ๋ฐ ๋” ๋งŽ์€ ์‹œ์Šคํ…œ ํ˜ธ์ถœ์ด madvise()๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ์ „์— ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค. ๊ถ๊ทน์ ์œผ๋กœ ๋‘ ์Šค๋ ˆ๋“œ ์ค‘ ํ•˜๋‚˜๊ฐ€ ๋งˆ์นจ๋‚ด madvise()๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  seccomp๊ฐ€ ํ•ด๋‹น ์Šค๋ ˆ๋“œ๋ฅผ ์ ์ ˆํ•˜๊ฒŒ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ openmp๋Š” ์Šค๋ ˆ๋“œ ์‚ฌ์ด์— ๋™๊ธฐํ™”๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ ๋‘ ๋ฒˆ์งธ ์Šค๋ ˆ๋“œ๊ฐ€ madvise()๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ์ „์—(๊ทธ๋ฆฌ๊ณ  ์ฃฝ๊ธฐ ์ „์—) ๋‘ ๋ฒˆ์งธ ์Šค๋ ˆ๋“œ๋Š” ์ฃฝ์€ ์Šค๋ ˆ๋“œ์—์„œ ๋ฌด์–ธ๊ฐ€๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ์„ ๋•Œ futex()๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด๊ฒƒ์ด ํ”„๋กœ๊ทธ๋žจ์ด ์ค‘๋‹จ๋˜๋Š” ์ด์œ ์ž…๋‹ˆ๋‹ค. ํ•˜๋‚˜์˜ ์Šค๋ ˆ๋“œ๊ฐ€ ์ข…๋ฃŒ๋˜์—ˆ๊ณ  ๋‘ ๋ฒˆ์งธ ์Šค๋ ˆ๋“œ๋Š” ๋„์ฐฉํ•˜์ง€ ์•Š์„ ๋ฐ์ดํ„ฐ(์ฃฝ์€ ์Šค๋ ˆ๋“œ์—์„œ)๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” openmp๋กœ ๋งŽ์€ ์ž‘์—…์„ ํ•˜์ง€ ์•Š์•˜์ง€๋งŒ ๋ณ‘๋ ฌ ๋ธ”๋ก์˜ ์‹ ํ˜ธ์— ๋Œ€ํ•ด [ 1 , 2 , 3 , ...] ์•ฝ๊ฐ„์˜ ํ† ๋ก ์ด ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ถ๊ทน์ ์œผ๋กœ ๊ทธ๊ฒƒ์€ ํ”ผํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ข‹์€ ์–ด๋ ค์šด ๋ฌธ์ œ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค.

๋ช‡ ๊ฐ€์ง€ ์ž ์žฌ์ ์ธ ์‰ฌ์šด ์†”๋ฃจ์…˜์ด ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. SCMP_ACT_KILL ๋ฅผ ๊ธฐ๋ณธ ํ•ธ๋“ค๋Ÿฌ๋กœ ์‚ฌ์šฉํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ๋Œ€์‹  SCMP_ACT_ERROR(5) ์™€ ๊ฐ™์€ ์˜ค๋ฅ˜ ์ฝ”๋“œ๋ฅผ ๋Œ€์‹  ์‚ฌ์šฉํ•˜๋„๋ก ์ „ํ™˜ํ•˜์‹ญ์‹œ์˜ค. ์˜ˆ์ œ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์ด ๋ณ€๊ฒฝ์„ ์ˆ˜ํ–‰ํ–ˆ์œผ๋ฉฐ ์ œ๋Œ€๋กœ ์ข…๋ฃŒ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค.

  2. openmp์˜ ํž˜์ด ํ•„์š”ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ๋‹ค๋ฅธ ์˜ต์…˜์€ pthread_create() ๋˜๋Š” fork()์™€ ๊ฐ™์€ ๋ณด๋‹ค ์ผ๋ฐ˜์ ์ธ ์†”๋ฃจ์…˜์„ ์‚ฌ์šฉํ•˜๋„๋ก ์ „ํ™˜ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@drakenclimber ๊ทธ๋ž˜์„œ ๋ฌธ์ œ๋Š” ์‹ค์ œ๋กœ openmp๊ฐ€ ์ผ๋ฐ˜์ ์œผ๋กœ ํ•„ํ„ฐ์˜ ์ผ๋ถ€๊ฐ€ ์•„๋‹ ์ˆ˜ ์žˆ๋Š” ์ถ”๊ฐ€ ์‹œ์Šคํ…œ

@drakenclimber ์‹œ๊ฐ„์„ ํˆฌ์ž

๋” ๋งŽ์€ ๋งฅ๋ฝ์„ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด: ์ €๋Š” ๊ณผํ•™ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฏ€๋กœ OpenMP๋กœ ๋‹จ์ˆœํ•˜๊ฒŒ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์„ ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” ๋˜ํ•œ ๋‚ด ์‚ฌ์šฉ์ž๋ฅผ ์ž์‹ ์œผ๋กœ๋ถ€ํ„ฐ ๋ณดํ˜ธํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋‚ด ํ”„๋กœ๊ทธ๋žจ์ด ๋น„์ •์ƒ์ ์ธ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋ฉด ํ•ต์„ ์ œ๊ฑฐํ•˜์‹ญ์‹œ์˜ค. ๋‚ด๊ฐ€ ๊ถ๊ทน์ ์œผ๋กœ ๋‹ฌ์„ฑํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฒƒ์€ ๋‹ค์†Œ ํ•ฉ๋ฆฌ์ ์ธ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€์™€ ํ•จ๊ป˜ ํ”„๋กœ์„ธ์Šค(#96)๋ฅผ ์ข…๋ฃŒํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š”์— errno๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ์–ด๋–ค ๊ฐ€์น˜ SCMP_ACT_ERROR ๋ฐ€์ ‘ํ•˜๊ฒŒ ๋ชจ๋ฐฉ์— SECCOMP_RET_KILL_PROCESS ? ๋ชจ๋“  syscall์—์„œ ์ž˜ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

@pcmoore - ์ข€. ๊ทธ๋Ÿฌ๋‚˜ ๋” ํฐ ๋ฌธ์ œ๋Š” openmp๊ฐ€ ๋ณ‘๋ ฌ ๊ตฌ์กฐ ๋‚ด์—์„œ ์‹ ํ˜ธ๋ฅผ ์ •์ƒ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๊ฒƒ์ด ๋””์ž์ธ์— ์˜ํ•œ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

@kloetzl - ๊ฑฑ์ •ํ•˜์ง€ ๋งˆ์„ธ์š”. OpenMP๋ฅผ ์™„์ „ํžˆ ๊ณ ์ˆ˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. OpenMP ์ปค๋ฎค๋‹ˆํ‹ฐ์˜ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ผ์„ ํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

ctx = seccomp_init(SCMP_ACT_ERRNO(ENOTBLK));
...
bool kill_process = false;
int rc;
#pragma omp parallel for num_threads(THREADS)
  for (int i = 0; i < THREADS * 2; i++) {
    fprintf(stderr, "%u\n", func(i));
    if (i == K) {
      rc = madvise(NULL, 0, 0); 
      if (rc < 0)
        kill_process = true;
      }   
    // sleep(10);
  }

  if (kill_process)
    goto error;

  seccomp_release(ctx);
  return 0;
error:
  seccomp_release(ctx);
  return -1; 
}

SCMP_ACT_ERRNO() ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•˜๋Š” ์˜ค๋ฅ˜ SCMP_ACT_ERRNO() ๋Š” ๋ชจ๋“  ์‹œ์Šคํ…œ ํ˜ธ์ถœ์—์„œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‹น์‹ ์˜ ํ”„๋กœ๊ทธ๋žจ์€ ๊ทธ๊ฒƒ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ์‚ฌ์šฉ์ž์—๊ฒŒ ์˜ค๋ฅ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋‹น์‹ ์€ ๋‹น์‹ ์—๊ฒŒ ๊ฐ€์žฅ ์ ํ•ฉํ•œ errno๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ENOTBLK ๊ฐ™์ด ๋ชจํ˜ธํ•œ ๊ฒƒ์„ ์„ ํƒ ํ•˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ํ˜ธ์ถœ์„ ์ฐจ๋‹จํ•˜๋Š” seccomp์—์„œ ๋ฐœ์ƒํ–ˆ์Œ์„

tl;dr - ๋ณ‘๋ ฌ ๋ฃจํ”„์—์„œ ๋ฌธ์ œ๋ฅผ ๊ฐ์ง€ํ•˜์ง€๋งŒ ๋ฃจํ”„๊ฐ€ ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ์ฒ˜๋ฆฌ๋ฅผ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค. ์‹คํŒจํ•œ ์‹œ์Šคํ…œ ํ˜ธ์ถœ๋กœ ์ธํ•ด ๋ฃจํ”„ ๋‚ด์— ์ถ”๊ฐ€ ๋ฐฉ์–ด ์ฝ”๋”ฉ์„ ์ถ”๊ฐ€ํ•ด์•ผ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

@kloetzl - ๋ฌธ์ œ #96์„ ์‚ดํŽด๋ณด๊ณ  OpenMP์™€ ์–ผ๋งˆ๋‚˜ ์ž˜ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๋˜ ๋‹ค๋ฅธ ํ•ด๊ฒฐ์ฑ…์ด ๋  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ์‚ฌ ํ•ด์š”!

๊ทธ๋ฆฌ๊ณ  ๋‹น์‹ ์˜ ํ”„๋กœ๊ทธ๋žจ์€ ๊ทธ๊ฒƒ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ์‚ฌ์šฉ์ž์—๊ฒŒ ์˜ค๋ฅ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋‹น์‹ ์€ ๋‹น์‹ ์—๊ฒŒ ๊ฐ€์žฅ ์ ํ•ฉํ•œ errno๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์‹ค, ENOTBLK์™€ ๊ฐ™์ด ๋ชจํ˜ธํ•œ ๊ฒƒ์„ ์„ ํƒํ•˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ํ˜ธ์ถœ์„ ์ฐจ๋‹จํ•˜๋Š” seccomp์—์„œ ๋ฐœ์ƒํ–ˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ๋Š” madvise ๊ฐ€ malloc ์˜ ๊นŠ์ˆ™ํ•œ ๊ณณ์—์„œ ํ˜ธ์ถœ๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋‚˜๋Š” ์˜ค๋ฅ˜๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์‚ฌ๋žŒ์ด ์•„๋‹™๋‹ˆ๋‹ค. glibc๋Š” ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ฌธ์ œ๋Š” glibc(๋ฐ ์‹œ์Šคํ…œ ํ˜ธ์ถœ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋‹ค๋ฅธ ๋ชจ๋“  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ)๊ฐ€ ์‹œ์Šคํ…œ ํ˜ธ์ถœ์ด ๋งค๋‰ด์–ผ ํŽ˜์ด์ง€์— ์ œ๊ณต๋œ ๊ฒƒ๊ณผ ๋‹ค๋ฅธ ์˜ค๋ฅ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ  ์ ์ ˆํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

๋ฌธ์ œ๋Š” madvise๊ฐ€ malloc์˜ ๊นŠ์ˆ™ํ•œ ๊ณณ์—์„œ ํ˜ธ์ถœ๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋‚˜๋Š” ์˜ค๋ฅ˜๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์‚ฌ๋žŒ์ด ์•„๋‹™๋‹ˆ๋‹ค. glibc๋Š” ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ฌธ์ œ๋Š” glibc(๋ฐ ์‹œ์Šคํ…œ ํ˜ธ์ถœ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋‹ค๋ฅธ ๋ชจ๋“  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ)๊ฐ€ ์‹œ์Šคํ…œ ํ˜ธ์ถœ์ด ๋งค๋‰ด์–ผ ํŽ˜์ด์ง€์— ์ œ๊ณต๋œ ๊ฒƒ๊ณผ ๋‹ค๋ฅธ ์˜ค๋ฅ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ  ์ ์ ˆํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

์•„... ์•Œ์•˜์–ด. ํ™•์‹คํžˆ ํ•˜๋ ค๋ฉด glibc ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ด์•ผ ํ•˜์ง€๋งŒ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ถ”์ธก์— ์œ„ํ—˜์„ ๊ฐ์ˆ˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • madvise ๊ฐ€ ์˜ค๋ฅ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉด glibc๋Š” _ํ™•์‹คํžˆ_ ์˜ค๋ฅ˜๋„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • glibc๊ฐ€ seccomp๊ฐ€ ๋ฐ˜ํ™˜ํ•œ ๊ฒƒ๊ณผ ๋‹ค๋ฅธ ์˜ค๋ฅ˜๋ฅผ ๋ฐ˜ํ™˜ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์œผ๋ฏ€๋กœ ENOTBLK ์™€ ๊ฐ™์€ "์‚ฌ์šฉ์ž ์ง€์ •" ๋ฐ˜ํ™˜ ์ฝ”๋“œ๋ฅผ ์˜ˆ์ƒํ•˜๋Š” ๊ฒฝ์šฐ ์ฃผ์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ฐ„๋‹จํžˆ ๋งํ•ด์„œ glibc๋Š” _any_ ์˜ค๋ฅ˜ ์ฝ”๋“œ๋ฅผ ์–ต์ œํ•˜์ง€ ์•Š์•„์•ผ ํ•˜์ง€๋งŒ ๋Œ€์‹  ๋‹ค๋ฅธ ์˜ค๋ฅ˜ ์ฝ”๋“œ๋ฅผ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์—ฌ๋Ÿฌ๋ถ„๊ณผ ํ•จ๊ป˜ํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์ง€๋งŒ OpenMP์— ๋Œ€ํ•œ ๋ฐฐ๊ฒฝ ์ง€์‹์ด ๋ถ€์กฑํ•˜์—ฌ ์•ฝ๊ฐ„ ๋’ค์ณ์งˆ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค ... ์œ„์˜ ์˜๊ฒฌ์— ๋”ฐ๋ฅด๋ฉด KILL_PROCESS ์—ฌ๊ธฐ์—์„œ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์†”๋ฃจ์…˜์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๊ทธ๋ ‡๋‹ค๋ฉด v2.4 ๋ฆด๋ฆฌ์Šค ์ „์— ํ•ด๊ฒฐํ•ด์•ผ ํ•  ์‚ฌํ•ญ ๋ชฉ๋ก์— ์žˆ์ง€๋งŒ ํ•ด๋‹น ๋ฌธ์ œ์˜ ์šฐ์„  ์ˆœ์œ„๋ฅผ ๋†’์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@pcmoore - ์˜ˆ, KILL_PROCESS ๊ฐ€ ์ด ๋ฒ„๊ทธ์— ๋Œ€ํ•œ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์†”๋ฃจ์…˜์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. KILL_PROCESS ์ž‘์—…์„ ์‚ฌ์šฉํ•˜์—ฌ ์œ„์˜ @kloetzl ์˜ ํ…Œ์ŠคํŠธ ํ”„๋กœ๊ทธ๋žจ์„ ํ…Œ์ŠคํŠธ

๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ๊ตฌํ˜„ํ–ˆ์ง€๋งŒ ํ˜„์žฌ ํŒŒ์ด์ฌ ์ž๋™ ํ…Œ์ŠคํŠธ์—์„œ ๋ช‡ ๊ฐ€์ง€ ๊ฑธ๋ฆผ๋Œ์„ ์น˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ์ฃผ์— ํŒจ์น˜๊ฐ€ ๋‚˜์™€์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@drakenclimber ์˜ค, ํŒจ์น˜? ์ €๋Š” ํŒจ์น˜๋ฅผ ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค :)

๊ณ ๋งˆ์›Œ ์–˜๋“ค์•„.

KILL_PROCESS ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์Œ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ €๋„ Arch์—์„œ ๋กœ์ปฌ ๋ฒ„์ „์˜ libseccomp๋ฅผ ํ•ดํ‚นํ–ˆ์œผ๋ฉฐ ํ…Œ์ŠคํŠธ ํ”„๋กœ๊ทธ๋žจ์ด ์˜๋„ํ•œ ๋Œ€๋กœ ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ฒฌ๊ณ ํ•œ ํ…Œ์ŠคํŠธ๋ฅผ ์ œ๊ณตํ•˜๊ณ  ์ด๋ฅผ ๋‹ค๋ฅธ ์ปค๋„์—์„œ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ด ๋” ํฐ ๋„์ „์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@kloetzl ํ™•์ธ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ, ์ ์ ˆํ•œ ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์€ ์ง€๋ฃจํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. IMHO๋ฅผ ํ…Œ์ŠคํŠธํ•˜๋Š” ์ฝ”๋“œ๋งŒํผ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

@drakenclimber ์˜ PR์„ ๊ธฐ๋Œ€ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ•ด๋‹น ์ฝ”๋“œ๊ฐ€ ๊ฒŒ์‹œ๋˜๋ฉด ์ข€ ๋” ๋…ผ์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ €๋Š” COVID-19 ๋ด„์ฒ  ๋Œ€์ฒญ์†Œ๋ฅผ ํ•˜๊ณ  ์žˆ๋Š”๋ฐ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. @kloetzl์ด ๋งž์Šต๋‹ˆ๊นŒ? ์ด ๋ฌธ์ œ๋ฅผ ๋‹ซ์„ ์˜ˆ์ •์ด์ง€๋งŒ ๋‚ด๊ฐ€ ํ‹€๋ ธ๊ณ  ์—ฌ์ „ํžˆ ๋ฌธ์ œ๊ฐ€ ํ‘œ์‹œ๋˜๋ฉด ์•Œ๋ ค์ฃผ์‹œ๋ฉด ๋‹ค์‹œ ์—ด๊ฒ ์Šต๋‹ˆ๋‹ค!

์ƒ๊ธฐ์‹œ์ผœ ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์•ฝ๊ฐ„์˜ ํ…Œ์ŠคํŠธ๋ฅผ ๊ฑฐ์ณค์Šต๋‹ˆ๋‹ค.

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

์•„, ์˜ˆ, libseccomp์—์„œ ์‹ ํ˜ธ ์ฒ˜๋ฆฌ๊ธฐ๋ฅผ ๋ฎ์–ด์“ฐ๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ์šฐ๋ฆฌ๊ฐ€ ํ•  ์ˆ˜ ์žˆ๋Š” ์ผ์ด ๋งŽ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋จธ์ง€ ์ž‘์—…์ด ์™„๋ฃŒ๋˜์—ˆ์Œ์„ ์•Œ๋ ค์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

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