Libseccomp: Q: ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ์—์„œ SCMP_ACT_NOTIFY๊ฐ€ ์žˆ๋Š” ๋‹ค๋ฅธ ํ•„ํ„ฐ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

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

libseccomp๋Š” ์•Œ๋ฆผ fd๋ฅผ ์ „์—ญ ๋ณ€์ˆ˜ state.notify_fd ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ (์ฆ‰, TSYNC๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ ) ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ์—์„œ ๋‹ค๋ฅธ ํ•„ํ„ฐ๋ฅผ ๊ฐ€์ง„ ๋‹ค์ค‘ ์Šค๋ ˆ๋“œ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์— libseccomp๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๋ถˆ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

libseccomp์—๋Š” seccomp_reset(NULL, ...) ๊ฐ€ ์žˆ์–ด ์ „์—ญ ๋ณ€์ˆ˜ state.notify_fd ๋ฅผ ์žฌ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ seccomp_reset() ๋Š” state.nr_seccomp = -1 ๋ฅผ ์žฌ์„ค์ •ํ•˜๋Š” ๋ถˆํ–‰ํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋‚ณ์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋Š” libseccomp-golang์—์„œ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๊ณ  ํ•  ๋•Œ ๋ฐœ๊ฒฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค( https://github.com/seccomp/libseccomp-golang/pull/59#issuecomment -723045033 ์ฐธ์กฐ).

cc @yvesf @rata

prioritlow question

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

์šฐ๋ฆฌ ๋ชจ๋‘๊ฐ€ ์—ฌ๊ธฐ์— ๋™์˜ํ•˜๋Š” ๊ฒƒ ๊ฐ™์œผ๋ฏ€๋กœ ์ด ๋ฌธ์ œ๋ฅผ ์ข…๋ฃŒํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. @alban ์ค‘์š”ํ•œ ๊ฒƒ์„ ๋†“์น˜๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐ๋˜๋ฉด ์ €ํฌ์—๊ฒŒ ์•Œ๋ ค์ฃผ๊ฑฐ๋‚˜ ์ด ๋ฌธ์ œ๋ฅผ ๋‹ค์‹œ ์—ด์–ด์„œ ๋ชจ๋“  ๊ฒƒ์„ ์ •๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜์‹ญ์‹œ์˜ค.

๋ชจ๋‘ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

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

@drakenclimber ๋Š” ์ด์— ๋Œ€ํ•œ ์„ค๋ช…์ด ๋‚˜์˜ฌ ๋•Œ๊นŒ์ง€ ๊ณง ์ถœ์‹œ๋  v2.5.1 ๋ฆด๋ฆฌ์Šค๋ฅผ ๋ณด๋ฅ˜ํ•ฉ๋‹ˆ๋‹ค. ์•„์ง ์›๋ณธ ๋ณด๊ณ ์„œ๋ฅผ ์™„์ „ํžˆ ์ดํ•ดํ–ˆ๋Š”์ง€๋Š” ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ, v2.5.1์ด seccomp_reset(NULL, ...) ๊ฐœ๋…์„ ๊ตฌํ˜„ํ•œ ์ฒซ ๋ฒˆ์งธ ๋ฆด๋ฆฌ์Šค์ด๋ฏ€๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ์„ ๋•Œ๊นŒ์ง€ ์ž ์‹œ๋งŒ ๊ธฐ๋‹ค๋ ค ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค...

ํ˜„์žฌ๋กœ์„œ๋Š” ์ด๋ฅผ ๋‹จ์ˆœํžˆ ์ฐจ๋‹จ๊ธฐ๋กœ v2.5.1 ์ด์ •ํ‘œ์— ์ถ”๊ฐ€ํ•˜๋ฉด ์กฐ์‚ฌํ•˜๋Š” ๋Œ€๋กœ ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@drakenclimber ๋Š” ์ด์— ๋Œ€ํ•œ ์„ค๋ช…์ด ๋‚˜์˜ฌ ๋•Œ๊นŒ์ง€ ๊ณง ์ถœ์‹œ๋  v2.5.1 ๋ฆด๋ฆฌ์Šค๋ฅผ ๋ณด๋ฅ˜ํ•ฉ๋‹ˆ๋‹ค. ์•„์ง ์›๋ณธ ๋ณด๊ณ ์„œ๋ฅผ ์™„์ „ํžˆ ์ดํ•ดํ–ˆ๋Š”์ง€๋Š” ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ, v2.5.1์ด seccomp_reset(NULL, ...) ๊ฐœ๋…์„ ๊ตฌํ˜„ํ•œ ์ฒซ ๋ฒˆ์งธ ๋ฆด๋ฆฌ์Šค์ด๋ฏ€๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ์„ ๋•Œ๊นŒ์ง€ ์ž ์‹œ๋งŒ ๊ธฐ๋‹ค๋ ค ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค...

๋™์˜. ํ•  ๊ฒƒ์ด๋‹ค.

libseccomp๋Š” ์•Œ๋ฆผ fd๋ฅผ ์ „์—ญ ๋ณ€์ˆ˜ state.notify_fd ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ (์ฆ‰, TSYNC๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ ) ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ์—์„œ ๋‹ค๋ฅธ ํ•„ํ„ฐ๋ฅผ ๊ฐ€์ง„ ๋‹ค์ค‘ ์Šค๋ ˆ๋“œ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์— libseccomp๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๋ถˆ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰ ๋ฌธ์žฅ์— ๋Œ€ํ•ด ์ข€ ๋” ์ž์„ธํžˆ ์„ค๋ช…ํ•ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ์ „๋‹ฌํ•˜๋ ค๋Š” ๋‚ด์šฉ์„ ์ž˜ ์ดํ•ดํ•˜์ง€ ๋ชปํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

FWIW, seccomp ์•Œ๋ฆผ FD๋Š” ํ”„๋กœ์„ธ์Šค ์ „์—ญ ๊ฐœ์ฒด์ด๋ฏ€๋กœ ์ปค๋„์—์„œ ํ•œ ๋ฒˆ๋งŒ ์š”์ฒญํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. https://github.com/seccomp/libseccomp/issues/273 ์—์„œ ๋ฌธ์ œ์— ๋Œ€ํ•œ ๋ฐฐ๊ฒฝ ์ง€์‹์„ ๋” ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

libseccomp์—๋Š” seccomp_reset(NULL, ...) ๊ฐ€ ์žˆ์–ด ์ „์—ญ ๋ณ€์ˆ˜ state.notify_fd ๋ฅผ ์žฌ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ seccomp_reset() ๋Š” state.nr_seccomp = -1 ๋ฅผ ์žฌ์„ค์ •ํ•˜๋Š” ๋ถˆํ–‰ํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋‚ณ์Šต๋‹ˆ๋‹ค.

state.nr_seccomp = -1 ์žฌ์„ค์ •์ด ์ค‘์š”ํ•œ ๋ฌธ์ œ์ธ ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? nr_seccomp ํ•„๋“œ๊ฐ€ -1 ๋กœ ์žฌ์„ค์ •๋˜๋ฉด ๋‹ค์Œ์— seccomp(2) ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ž‘์—…์ด ์š”์ฒญ๋  ๋•Œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ seccomp(2) ๊ฐ€ ์ง€์›๋˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ, seccomp(2) ์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ํ˜ธ์ถœ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ค‘์š”ํ•œ ๋ฌธ์ œ๋Š” ์•„๋‹™๋‹ˆ๋‹ค. ์‚ฌ์šฉ ์‚ฌ๋ก€์— ๋Œ€ํ•œ ์šฐ๋ ค ์‚ฌํ•ญ์ž…๋‹ˆ๊นŒ?

@alban- ๋‚˜์™€ ๋น„์Šทํ•œ ์งˆ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ํ•ฉ๋ฆฌ์ ์ธ ๋‹ค์ค‘ ์Šค๋ ˆ๋“œ, ๋‹ค์ค‘ seccomp-filter ์‚ฌ์šฉ ์‚ฌ๋ก€(C์—์„œ)๋ฅผ ๋ฐœ๋ช…ํ•˜๋Š” ๋ฐ ์•ฝ๊ฐ„์˜ ์‹œ๊ฐ„์„ ๋ณด๋ƒˆ์ง€๋งŒ ์‹ค์ œ๋กœ ์•„๋ฌด ๊ฒƒ๋„ ์ƒ๊ฐํ•ด๋‚ด์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

os.LockOSThread() ์˜ Go ๋ฌธ์„œ๋ฅผ ์ฝ์—ˆ๋Š”๋ฐ ์ดํ•ด๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ €๋Š” ์ด ์ง€์‹์„ ๋‹ค์ค‘ ์Šค๋ ˆ๋“œ, ๋‹ค์ค‘ ์ดˆ ๊ตฌ์„ฑ ํ•„ํ„ฐ ์†”๋ฃจ์…˜์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋ฐ ์–ด๋ ค์›€์„ ๊ฒช๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์˜์‚ฌ ์ฝ”๋“œ๋‚˜ ๋‹น์‹ ์ด ์ƒ๊ฐํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•œ ๋†’์€ ์ˆ˜์ค€์˜ ๋””์ž์ธ์„ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๊ทธ๋Ÿฌ๋ฉด ๊ธฐ๊บผ์ด C๋กœ ํ”„๋กœํ† ํƒ€์ž…์„ ๋งŒ๋“ค ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰ ๋ฌธ์žฅ์— ๋Œ€ํ•ด ์ข€ ๋” ์ž์„ธํžˆ ์„ค๋ช…ํ•ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ์ „๋‹ฌํ•˜๋ ค๋Š” ๋‚ด์šฉ์„ ์ž˜ ์ดํ•ดํ•˜์ง€ ๋ชปํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

libseccomp-golang์—์„œ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์ž‘์—…์„ ํ•˜๋Š” ๋™์•ˆ ๋‹ค์Œ ์‹œ๋‚˜๋ฆฌ์˜ค๊ฐ€ ํ…Œ์ŠคํŠธ๋˜๊ณ  ์žˆ์Œ์„ ๊นจ๋‹ฌ์•˜์Šต๋‹ˆ๋‹ค.

  1. ๋‹จ์œ„ ํ…Œ์ŠคํŠธ์˜ ์ œ 1 ์‹คํ–‰์—์„œ, ๊ธฐ๋Š” seccomp ์ •์ฑ…์—†์ด ๋„ํฌ SECCOMP_FILTER_FLAG_TSYNC ์ด์ง€๋งŒ๋กœ (์ด ์Šค๋ ˆ๋“œ ๋ ˆ๋ฒจ์—์„œ์ธ๊ฐ€๋˜์ง€ ์•Š์€ ํ”„๋กœ์„ธ์Šค ๋ ˆ๋ฒจ ์ธ ์˜๋ฏธ) SECCOMP_FILTER_FLAG_NEW_LISTENER (libseccomp ์ €์žฅ ์žˆ๋„๋ก state.notify_fd ์˜ fd ).
  2. ๋™์ผํ•œ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๊ฐ€ ๋™์ผํ•œ ํ”„๋กœ์„ธ์Šค์—์„œ ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ์—์„œ ๋‹ค์‹œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค(ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด Go์—์„œ runtime.LockOSThread ). ๊ทธ๋Ÿฌ๋‚˜ libseccomp๋Š” ์ƒˆ ํ•„ํ„ฐ์— ๋Œ€ํ•œ ์ƒˆ fd๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋Œ€์‹  ์ด์ „ seccomp ํ•„ํ„ฐ( state.notify_fd )์˜ fd๋ฅผ ์žฌ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์ž˜๋ชป๋œ seccomp fd์—์„œ ์ด๋ฒคํŠธ๋ฅผ ์ˆ˜์‹ ํ•  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ…Œ์ŠคํŠธ๊ฐ€ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.

FWIW, seccomp ์•Œ๋ฆผ FD๋Š” ํ”„๋กœ์„ธ์Šค ์ „์—ญ ๊ฐœ์ฒด์ด๋ฏ€๋กœ ์ปค๋„์—์„œ ํ•œ ๋ฒˆ๋งŒ ์š”์ฒญํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. #273์„ ์ฝ๊ณ  ์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ๋ฐฐ๊ฒฝ ์ง€์‹์„ ๋” ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ์ดํ•ดํ•œ ๋ฐ”์— ๋”ฐ๋ฅด๋ฉด ์ปค๋„์€ ํ•„ํ„ฐ ํŠธ๋ฆฌ์—์„œ ํ•˜๋‚˜์˜ seccomp ์•Œ๋ฆผ FD๋งŒ ๋ฐ›๋„๋ก ์ œํ•œํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์œ„์˜ ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ๋Š” ๋™์ผํ•œ ํ”„๋กœ์„ธ์Šค์˜ ๋‘ ์Šค๋ ˆ๋“œ๊ฐ€ ์„œ๋กœ ๋‹ค๋ฅธ ํ•„ํ„ฐ ํŠธ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ ์ปค๋„ ๊ด€์ ์—์„œ๋Š” ๋ฌธ์ œ๊ฐ€ ์—†์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

SECCOMP_FILTER_FLAG_NEW_LISTENER ๋กœ ๋‹ค๋ฅธ ํ•„ํ„ฐ ํŠธ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด ์‹œ๋‚˜๋ฆฌ์˜ค๋Š” ์˜๋„์ ์œผ๋กœ ๊ตฌ์ถ•๋œ ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋™์ผํ•œ ํ”„๋กœ์„ธ์Šค์—์„œ ์‹คํ–‰๋˜๋Š” libseccomp-golang ๋‹จ์œ„ ํ…Œ์ŠคํŠธ์˜ ๊ฒฐ๊ณผ๋กœ ๋‚˜์˜จ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทผ๋ณธ ์›์ธ์€ ์Šค๋ ˆ๋“œ ๊ฐ„์— ๊ณต์œ ๋˜๋Š” ์ „์—ญ ๋ณ€์ˆ˜ state.notify_fd ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” libseccomp์ด๋ฏ€๋กœ ํ† ๋ก ์„ ์‹œ์ž‘ํ•˜๋ ค๋ฉด ์ด ๋ฒ„๊ทธ๋ฅผ ์—ฌ๊ธฐ์—์„œ ์—ด์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์ด "WONTFIX"๋กœ ๋‹ซํžˆ๋ฉด ๊ดœ์ฐฎ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค(๋‹ค๋ฅธ libseccomp ์‚ฌ์šฉ์ž๊ฐ€ ์ด๋Ÿฌํ•œ ์ข…๋ฅ˜์˜ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์ง€์›ํ•ด์•ผ ํ•˜๋Š”์ง€ ์—ฌ๋ถ€๋Š” ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค). ์ด ๊ฒฝ์šฐ libseccomp-golang ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ฅผ ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์ฆ‰, ๊ฐ ํ…Œ์ŠคํŠธ ๋ฐ˜๋ณต์— ๋Œ€ํ•ด ๋ณ„๋„์˜ ํ”„๋กœ์„ธ์Šค ์‚ฌ์šฉ). ์–ด์จŒ๋“  ๊ทธ๋ ‡๊ฒŒ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(์Šค๋ ˆ๋“œ ์ˆ˜์ค€ ํ•„ํ„ฐ์™€ ํ”„๋กœ์„ธ์Šค ์ˆ˜์ค€ ํ•„ํ„ฐ๋ฅผ ํ˜ผํ•ฉํ•˜๋Š” ๊ฒƒ์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด - ์ปค๋„์—์„œ ๊ฑฐ๋ถ€ํ•  ์ˆ˜ ์žˆ์Œ).

libseccomp-golang์—์„œ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์ž‘์—…์„ ํ•˜๋Š” ๋™์•ˆ ๋‹ค์Œ ์‹œ๋‚˜๋ฆฌ์˜ค๊ฐ€ ํ…Œ์ŠคํŠธ๋˜๊ณ  ์žˆ์Œ์„ ๊นจ๋‹ฌ์•˜์Šต๋‹ˆ๋‹ค.

  1. ๋‹จ์œ„ ํ…Œ์ŠคํŠธ์˜ ์ œ 1 ์‹คํ–‰์—์„œ, ๊ธฐ๋Š” seccomp ์ •์ฑ…์—†์ด ๋„ํฌ SECCOMP_FILTER_FLAG_TSYNC ์ด์ง€๋งŒ๋กœ (์ด ์Šค๋ ˆ๋“œ ๋ ˆ๋ฒจ์—์„œ์ธ๊ฐ€๋˜์ง€ ์•Š์€ ํ”„๋กœ์„ธ์Šค ๋ ˆ๋ฒจ ์ธ ์˜๋ฏธ) SECCOMP_FILTER_FLAG_NEW_LISTENER (libseccomp ์ €์žฅ ์žˆ๋„๋ก state.notify_fd ์˜ fd ).
  2. ๋™์ผํ•œ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๊ฐ€ ๋™์ผํ•œ ํ”„๋กœ์„ธ์Šค์—์„œ ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ์—์„œ ๋‹ค์‹œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค(ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด Go์—์„œ runtime.LockOSThread ). ๊ทธ๋Ÿฌ๋‚˜ libseccomp๋Š” ์ƒˆ ํ•„ํ„ฐ์— ๋Œ€ํ•œ ์ƒˆ fd๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋Œ€์‹  ์ด์ „ seccomp ํ•„ํ„ฐ( state.notify_fd )์˜ fd๋ฅผ ์žฌ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์ž˜๋ชป๋œ seccomp fd์—์„œ ์ด๋ฒคํŠธ๋ฅผ ์ˆ˜์‹ ํ•  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ…Œ์ŠคํŠธ๊ฐ€ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.

์•„ํ•˜, ์ด์ œ ๋” ์˜๋ฏธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ข…์ข… libseccomp-golang ๋ฐ”์ธ๋”ฉ์— ๋Œ€ํ•ด TSYNC๋ฅผ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์„ค์ •ํ•ด์•ผ ํ•˜๋Š”์ง€ ๊ถ๊ธˆํ–ˆ์Šต๋‹ˆ๋‹ค. Go์˜ ์Šค๋ ˆ๋“œ ๋ชจํ˜ธ์„ฑ์„ ๊ฐ์•ˆํ•  ๋•Œ ํ›จ์”ฌ ๋” ์•ˆ์ „ํ•œ ์„ ํƒ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ์ดํ•ดํ•œ ๋ฐ”์— ๋”ฐ๋ฅด๋ฉด ์ปค๋„์€ ํ•„ํ„ฐ ํŠธ๋ฆฌ์—์„œ ํ•˜๋‚˜์˜ seccomp ์•Œ๋ฆผ FD๋งŒ ๋ฐ›๋„๋ก ์ œํ•œํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์œ„์˜ ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ๋Š” ๋™์ผํ•œ ํ”„๋กœ์„ธ์Šค์˜ ๋‘ ์Šค๋ ˆ๋“œ๊ฐ€ ์„œ๋กœ ๋‹ค๋ฅธ ํ•„ํ„ฐ ํŠธ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ ์ปค๋„ ๊ด€์ ์—์„œ๋Š” ๋ฌธ์ œ๊ฐ€ ์—†์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

SECCOMP_FILTER_FLAG_NEW_LISTENER ๋กœ ๋‹ค๋ฅธ ํ•„ํ„ฐ ํŠธ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด ์‹œ๋‚˜๋ฆฌ์˜ค๋Š” ์˜๋„์ ์œผ๋กœ ๊ตฌ์ถ•๋œ ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋™์ผํ•œ ํ”„๋กœ์„ธ์Šค์—์„œ ์‹คํ–‰๋˜๋Š” libseccomp-golang ๋‹จ์œ„ ํ…Œ์ŠคํŠธ์˜ ๊ฒฐ๊ณผ๋กœ ๋‚˜์˜จ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทผ๋ณธ ์›์ธ์€ ์Šค๋ ˆ๋“œ ๊ฐ„์— ๊ณต์œ ๋˜๋Š” ์ „์—ญ ๋ณ€์ˆ˜ state.notify_fd ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” libseccomp์ด๋ฏ€๋กœ ํ† ๋ก ์„ ์‹œ์ž‘ํ•˜๋ ค๋ฉด ์ด ๋ฒ„๊ทธ๋ฅผ ์—ฌ๊ธฐ์—์„œ ์—ด์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์ด "WONTFIX"๋กœ ๋‹ซํžˆ๋ฉด ๊ดœ์ฐฎ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค(๋‹ค๋ฅธ libseccomp ์‚ฌ์šฉ์ž๊ฐ€ ์ด๋Ÿฌํ•œ ์ข…๋ฅ˜์˜ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์ง€์›ํ•ด์•ผ ํ•˜๋Š”์ง€ ์—ฌ๋ถ€๋Š” ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค). ์ด ๊ฒฝ์šฐ libseccomp-golang ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ฅผ ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์ฆ‰, ๊ฐ ํ…Œ์ŠคํŠธ ๋ฐ˜๋ณต์— ๋Œ€ํ•ด ๋ณ„๋„์˜ ํ”„๋กœ์„ธ์Šค ์‚ฌ์šฉ). ์–ด์จŒ๋“  ๊ทธ๋ ‡๊ฒŒ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(์Šค๋ ˆ๋“œ ์ˆ˜์ค€ ํ•„ํ„ฐ์™€ ํ”„๋กœ์„ธ์Šค ์ˆ˜์ค€ ํ•„ํ„ฐ๋ฅผ ํ˜ผํ•ฉํ•˜๋Š” ๊ฒƒ์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด - ์ปค๋„์—์„œ ๊ฑฐ๋ถ€ํ•  ์ˆ˜ ์žˆ์Œ).

์ด์— ๋Œ€ํ•œ @drakenclimber ์˜ ์˜๊ฒฌ์„ ๋“ฃ๊ณ 

libseccomp์—์„œ ์ด ๋ฌธ์ œ๋ฅผ "์ˆ˜์ •"ํ•˜๋ ค๋ฉด libseccomp ์Šค๋ ˆ๋“œ๋ฅผ ์ธ์‹ํ•˜๋„๋ก ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ์Šค๋ ˆ๋“œ์—๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๋ฌธ์ œ์™€ ํ•จ์ •์ด ์žˆ์œผ๋ฏ€๋กœ ํ˜„์žฌ ์ด๊ฒƒ์ด ์ž˜๋ชป๋œ ์ƒ๊ฐ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋…ผ์Ÿ์„ ์œ„ํ•ด libseccomp ์Šค๋ ˆ๋“œ๋ฅผ ์ธ์‹ํ•˜๊ฒŒ ๋งŒ๋“ค๋ฉด ๋‚ด๋ถ€ ์ „์—ญ ์ƒํƒœ๋ฅผ ์Šค๋ ˆ๋“œ ํŠน์ • ์ƒํƒœ ๋ฐ/๋˜๋Š” ํ•„ํ„ฐ ํŠธ๋ฆฌ ํŠน์ • ์ƒํƒœ๋กœ ๋งŒ๋“ค ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋‘ ๊ฒฝ์šฐ ๋ชจ๋‘ ํ˜„์žฌ API( seccomp_reset(NULL, ...) )๊ฐ€ ์—ฌ์ „ํžˆ ํ•ฉ๋ฆฌ์ ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฏ€๋กœ API์™€ ํ•จ๊ป˜ ์žˆ๋Š” ๊ทธ๋Œ€๋กœ ๋‘๊ณ  ์‹ถ์€ ์œ ํ˜น์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•ด ์šฐ๋ ค ์‚ฌํ•ญ์ด ์žˆ๋Š” ์‚ฌ๋žŒ์ด ์žˆ์œผ๋ฉด ๊ณง ์•Œ๋ ค์ฃผ์‹ญ์‹œ์˜ค.

@drakenclimber? ์œ„์˜ ์‚ฌํ•ญ์— ๋Œ€ํ•ด ์ด์˜๋ฅผ ์ œ๊ธฐํ•˜์ง€ ์•Š๋Š” ์ด์ƒ v2.5.1 ๋ฆด๋ฆฌ์Šค๋กœ ๋Œ์•„๊ฐ€์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ด์— ๋Œ€ํ•œ @drakenclimber ์˜ ์˜๊ฒฌ์„ ๋“ฃ๊ณ 

๋‚˜๋Š” ๋™์˜ํ•œ๋‹ค. @tych0 ์˜ ์›๋ž˜ ํŒจ์น˜ ์„ธํŠธ์™€ ์ฃผ์„์€ ๋ฌผ๋ก  ์ปค๋„ ์ฝ”๋“œ ์ž์ฒด๋ฅผ ํŒŒํ—ค์น˜๋Š” ๋ฐ ์‹œ๊ฐ„์„ ๋ณด๋ƒˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฐ€ ๊ตฌ์ƒํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” ์ปจํ…Œ์ด๋„ˆํ™”๋œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์™”๋‹ค ๊ฐ”๋‹ค ํ•˜๋Š” ๋™์•ˆ ์•Œ๋ฆผ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ชจ๋‹ˆํ„ฐ๋ง ํ”„๋กœ์„ธ์Šค์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ปจํ…Œ์ด๋„ˆํ™”๋œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์•Œ๋ฆผ์ด ์žˆ๋Š” ์‹œ์Šคํ…œ ํ˜ธ์ถœ์„ ํ˜ธ์ถœํ•  ๋•Œ ๋ชจ๋‹ˆํ„ฐ๋ง ํ”„๋กœ์„ธ์Šค๋Š” ์š”์ฒญ์„ ํ—ˆ์šฉ/๊ฑฐ๋ถ€ํ•˜๋Š” ์ถ”๊ฐ€ ๋…ผ๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฆ‰, ์—ฌ๋Ÿฌ ์•Œ๋ฆผ ํ˜ธ์ถœ์ž์™€ ์ฒ˜๋ฆฌ๊ธฐ๊ฐ€ ์žˆ๋Š” ๋‹ค์ค‘ ์Šค๋ ˆ๋“œ, ๋‹จ์ผ ํ”„๋กœ์„ธ์Šค ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ์ƒ๊ฐํ•ด ๋ƒˆ์Šต๋‹ˆ๋‹ค. ์†”์งํžˆ ๊ทธ๋Ÿฐ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์ผ๊ด€์„ฑ ์žˆ๊ฒŒ ๊พธ๋ฐ€ ์ˆ˜๋Š” ์—†์—ˆ๋‹ค. ์ด๊ฒƒ์€ ๋‹ค์†Œ ์ธ์œ„์ ์ธ ์‚ฌ์šฉ ์‚ฌ๋ก€์ด๊ณ  ํ˜„์‹ค์ ์ธ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ํŒŒ์•…ํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ด WONTFIX๋ฅผ ํ‘œ์‹œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํ•˜๋‚˜๋Š” ์ œ์ณ๋‘๊ณ  - ์ปค๋„์ด ํ”„๋กœ์„ธ์Šค์— ์—ฌ๋Ÿฌ ์•Œ๋ฆผ fds๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ๊ฐœ์˜ pthread๋ฅผ ๋งŒ๋“ค๊ณ  ๋ชจ๋‘ ์ฆ‰์‹œ ์•Œ๋ฆผ ์ž‘์—…๊ณผ ํ•จ๊ป˜ seccomp ํ•„ํ„ฐ๋ฅผ ๋กœ๋“œํ•˜๋„๋ก ํ•จ์œผ๋กœ์จ ๋•Œ๋•Œ๋กœ ๋‘์„ธ ๊ฐœ์˜ ๋‹ค๋ฅธ ์•Œ๋ฆผ fds๋ฅผ ์‚ฌ์šฉ์ž ๊ณต๊ฐ„ ํ”„๋กœ์„ธ์Šค์— ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋„ˆ๋ฌด ๋น„ํ˜„์‹ค์ ์ด๋ฏ€๋กœ ์ด ์ปค๋„ ๋ฌธ์ œ๋„ WONTFIX๋กœ ํ‘œ์‹œํ•˜๋Š” ์ชฝ์œผ๋กœ ๊ธฐ์šธ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

@drakenclimber? ์œ„์˜ ์‚ฌํ•ญ์— ๋Œ€ํ•ด ์ด์˜๋ฅผ ์ œ๊ธฐํ•˜์ง€ ์•Š๋Š” ์ด์ƒ v2.5.1 ๋ฆด๋ฆฌ์Šค๋กœ ๋Œ์•„๊ฐ€์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์—„์ฒญ๋‚œ. ๋‹ค์Œ ์ฃผ ์ดˆ์— ์ž‘์—…์„ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์šฐ๋ฆฌ ๋ชจ๋‘๊ฐ€ ์—ฌ๊ธฐ์— ๋™์˜ํ•˜๋Š” ๊ฒƒ ๊ฐ™์œผ๋ฏ€๋กœ ์ด ๋ฌธ์ œ๋ฅผ ์ข…๋ฃŒํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. @alban ์ค‘์š”ํ•œ ๊ฒƒ์„ ๋†“์น˜๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐ๋˜๋ฉด ์ €ํฌ์—๊ฒŒ ์•Œ๋ ค์ฃผ๊ฑฐ๋‚˜ ์ด ๋ฌธ์ œ๋ฅผ ๋‹ค์‹œ ์—ด์–ด์„œ ๋ชจ๋“  ๊ฒƒ์„ ์ •๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜์‹ญ์‹œ์˜ค.

๋ชจ๋‘ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

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

๊ด€๋ จ ๋ฌธ์ œ

pcmoore picture pcmoore  ยท  23์ฝ”๋ฉ˜ํŠธ

alban picture alban  ยท  5์ฝ”๋ฉ˜ํŠธ

kloetzl picture kloetzl  ยท  19์ฝ”๋ฉ˜ํŠธ

cgwalters picture cgwalters  ยท  14์ฝ”๋ฉ˜ํŠธ

erdumbledore picture erdumbledore  ยท  3์ฝ”๋ฉ˜ํŠธ