libseccompã¯ãéç¥fdãã°ããŒãã«å€æ°state.notify_fd
æ ŒçŽããŸãã ããã«ãããç°ãªãã¹ã¬ããã§ç°ãªããã£ã«ã¿ãŒã䜿çšãããã«ãã¹ã¬ããã¢ããªã±ãŒã·ã§ã³ã«libseccompã䜿çšããããšãã§ããªããªããŸãïŒã€ãŸããTSYNCã䜿çšããªãå ŽåïŒã
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
@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
æ ŒçŽããŸãã ããã«ãããç°ãªãã¹ã¬ããã§ç°ãªããã£ã«ã¿ãŒã䜿çšãããã«ãã¹ã¬ããã¢ããªã±ãŒã·ã§ã³ã«libseccompã䜿çšããããšãã§ããªããªããŸãïŒã€ãŸããTSYNCã䜿çšããªãå ŽåïŒã
ãã®æåŸã®æã«ã€ããŠããå°ã詳ãã説æããŠããã ããŸããïŒ ããªããäœãäŒããããšããŠããã®ãç解ã§ããŸããã
FWIWãseccompéç¥FDã¯ããã»ã¹ã°ããŒãã«ãªããžã§ã¯ãã§ãããã«ãŒãã«ããèŠæ±ã§ããã®ã¯1åã ãã§ãã 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ããã¥ã¡ã³ããèªã¿ãŸããããããã¯ç§ã«ã¯çã«ããªã£ãŠããŸãã ããããç§ã¯ãã®ç¥èããã«ãã¹ã¬ããããã«ãseccomp-filterãœãªã¥ãŒã·ã§ã³ã«å€æããã®ã«èŠåŽããŠããŸãã
ããªããèããŠããããšã®ããã€ãã®æ¬äŒŒã³ãŒããŸãã¯ããã€ãã®é«ã¬ãã«ã®èšèšãå ±æã§ããŸããïŒ ãããªããåãã§Cã§ãããã¿ã€ããäœæããŸãã
ãã®æåŸã®æã«ã€ããŠããå°ã詳ãã説æããŠããã ããŸããïŒ ããªããäœãäŒããããšããŠããã®ãç解ã§ããŸããã
libseccomp-golangã§åäœãã¹ãã«åãçµãã§ãããšãã«ã次ã®ã·ããªãªããã¹ããããŠããããšã«æ°ä»ããŸããã
SECCOMP_FILTER_FLAG_TSYNC
ïŒããã¯ãã¹ã¬ããã¬ãã«ã§ã¯ãªããããã»ã¹ã»ã¬ãã«ã§é©çšãããããšãæå³ããïŒããã§SECCOMP_FILTER_FLAG_NEW_LISTENER
libseccompãæ ŒçŽããããã«ïŒ state.notify_fd
ã®fdïŒãruntime.LockOSThread
ã䜿çšããŠç¢ºèªããŸãïŒã ãã ããlibseccompã¯ãæ°ãããã£ã«ã¿ãŒã®æ°ããfdãååŸãã代ããã«ãåã®seccompãã£ã«ã¿ãŒïŒ state.notify_fd
ïŒã®fdãåå©çšããŸãã 次ã«ãééã£ãseccomp fdã§ã€ãã³ããåä¿¡ããããšãäºæ³ãããããããã¹ãã¯å€±æããŸããFWIWãseccompéç¥FDã¯ããã»ã¹ã°ããŒãã«ãªããžã§ã¯ãã§ãããã«ãŒãã«ããèŠæ±ã§ããã®ã¯1åã ãã§ãã ãã®åé¡ã®èæ¯ã«ã€ããŠã¯ãïŒ273ãã芧ãã ããã
ç§ãç解ãããšããã«ãããšãã«ãŒãã«ã¯ããã£ã«ã¿ãŒããªãŒã§1ã€ã®seccompéç¥FDã®ã¿ãååŸããããã«å¶éããŠããŸãã ãã ããäžèšã®ã·ããªãªã§ã¯ãåãããã»ã¹ã®2ã€ã®ã¹ã¬ãããç°ãªããã£ã«ã¿ãŒããªãŒã䜿çšããŠãããããã«ãŒãã«ã®èŠ³ç¹ããã¯åé¡ãããŸããã
SECCOMP_FILTER_FLAG_NEW_LISTENER
ç°ãªããã£ã«ã¿ãŒããªãŒã䜿çšãããã®ã·ããªãªã¯ãæå³çã«äœæããããã®ã§ã¯ãªããåãããã»ã¹ã§å®è¡ãããŠããlibseccomp-golangåäœãã¹ãã®çµæãšããŠäœæããããã®ã§ãã ããããæ ¹æ¬çãªåå ã¯ã¹ã¬ããéã§å
±æãããã°ããŒãã«å€æ°state.notify_fd
ã䜿çšããlibseccompã§ãããããããã§ãã®ãã°ãéããŠãã£ã¹ã«ãã·ã§ã³ãéãå¿
èŠããããšæããŸããã ãã ããããããWONTFIXããšããŠéããããã°åé¡ãããŸããïŒä»ã®libseccompãŠãŒã¶ãŒããã®çš®ã®ã·ããªãªããµããŒãããå¿
èŠããããã©ããã¯ããããŸããïŒã ãã®å Žåãlibseccomp-golangåäœãã¹ããå¥ã®æ¹æ³ã§äœæã§ããŸãïŒã€ãŸãããã¹ãã®å埩ããšã«åå¥ã®ããã»ã¹ã䜿çšããŸãïŒã ãšã«ãããããè¡ãå¿
èŠããããŸãïŒã¹ã¬ããã¬ãã«ã®ãã£ã«ã¿ãŒãšããã»ã¹ã¬ãã«ã®ãã£ã«ã¿ãŒã®æ··åãé¿ããããã«-ã«ãŒãã«ã«ãã£ãŠæåŠãããŸãïŒã
libseccomp-golangã§åäœãã¹ãã«åãçµãã§ãããšãã«ã次ã®ã·ããªãªããã¹ããããŠããããšã«æ°ä»ããŸããã
- ãŠããããã¹ãã®æåã®å®è¡ã§ã¯ãseccompããªã·ãŒãããã«é©çšããã
SECCOMP_FILTER_FLAG_TSYNC
ïŒããã¯ãã¹ã¬ããã¬ãã«ã§ã¯ãªããããã»ã¹ã»ã¬ãã«ã§é©çšãããããšãæå³ããïŒããã§SECCOMP_FILTER_FLAG_NEW_LISTENER
libseccompãæ ŒçŽããããã«ïŒstate.notify_fd
ã®fdïŒã- åããŠããããã¹ããåãããã»ã¹ã§å¥ã®ã¹ã¬ããã§å床å®è¡ãããŸãïŒGoã§
runtime.LockOSThread
ã䜿çšããŠç¢ºèªããŸãïŒã ãã ããlibseccompã¯ãæ°ãããã£ã«ã¿ãŒã®æ°ããfdãååŸãã代ããã«ãåã®seccompãã£ã«ã¿ãŒïŒstate.notify_fd
ïŒã®fdãåå©çšããŸãã 次ã«ãééã£ãseccomp fdã§ã€ãã³ããåä¿¡ããããšãäºæ³ãããããããã¹ãã¯å€±æããŸãã
ãããããã¯ä»ããçã«ããªã£ãŠããŸãã TSYNCãlibseccomp-golangãã€ã³ãã£ã³ã°ã®ããã©ã«ãã«ããã¹ããã©ããçåã«æãããšããããããŸãã Goã®ã¹ã¬ããã®ãããŸãããèãããšãã¯ããã«å®å šãªéžæã®ããã§ãã
ç§ãç解ãããšããã«ãããšãã«ãŒãã«ã¯ããã£ã«ã¿ãŒããªãŒã§1ã€ã®seccompéç¥FDã®ã¿ãååŸããããã«å¶éããŠããŸãã ãã ããäžèšã®ã·ããªãªã§ã¯ãåãããã»ã¹ã®2ã€ã®ã¹ã¬ãããç°ãªããã£ã«ã¿ãŒããªãŒã䜿çšããŠãããããã«ãŒãã«ã®èŠ³ç¹ããã¯åé¡ãããŸããã
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ãã£ã«ã¿ãŒãããã«ããŒããããããšã§ã2ã€ãŸãã¯3ã€ã®ç°ãªãéç¥fdããŠãŒã¶ãŒã¹ããŒã¹ããã»ã¹ã«è¿ãããšãã§ããå ŽåããããŸããã ããã¯éåžžã«éçŸå®çã§ããããããã®ã«ãŒãã«ã®åé¡ãWONTFIXãšããŠããŒã¯ããããšã«ãåŸåããŸãã
@drakenclimberïŒ äžèšã«ç°è°ããªãéããv2.5.1ãªãªãŒã¹ã«æ»ã£ããšæããŸãã
çŽ æŽãããã æ¥é±åãã«äœæ¥ãéå§ã§ããã¯ãã§ãã
ããã§ã¯å šå¡ãåæããŠããããã§ãã®ã§ããã®åé¡ã解決ããŸãã @albanäœãéèŠãªãã®ãäžè¶³ããŠãããšæãããå Žåã¯ããã®åé¡ããç¥ããããã ãããå床éããŠãã ããããã¹ãŠè§£æ±ºã§ããŸãã
ã¿ããªãããããšãã
æãåèã«ãªãã³ã¡ã³ã
ããã§ã¯å šå¡ãåæããŠããããã§ãã®ã§ããã®åé¡ã解決ããŸãã @albanäœãéèŠãªãã®ãäžè¶³ããŠãããšæãããå Žåã¯ããã®åé¡ããç¥ããããã ãããå床éããŠãã ããããã¹ãŠè§£æ±ºã§ããŸãã
ã¿ããªãããããšãã