Libseccomp: рдмрдЧ: gen_bpf_generate() рд╡рд┐рдлрд▓рддрд╛ рдХреЛ рдареАрдХ рд╕реЗ рд╕рдВрднрд╛рд▓ рдирд╣реАрдВ рдкрд╛рддрд╛

рдХреЛ рдирд┐рд░реНрдорд┐рдд 28 рдордИ 2020  ┬╖  15рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: seccomp/libseccomp

рдирдорд╕реНрддреЗ,

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, libseccomp рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж - рд╣рдо рдЗрд╕реЗ рдХрдИ рд╡рд░реНрд╖реЛрдВ рд╕реЗ рдЦреБрд╢реА-рдЦреБрд╢реА рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ рдХрд┐рд╕реА рднреА рдореБрджреНрджреЗ (рдЕрдм рддрдХ) рдореЗрдВ рдирд╣реАрдВ рдЪрд▓рд╛ рд╣реИред рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рд╣рдорд╛рд░реЗ рдХреЛрдб рдореЗрдВ рдПрдХ рдмрдЧ рд╣реИ, рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдХреА рдЧрд▓рддрдлрд╣рдореА рд╣реИ, рдпрд╛ рдХреБрдЫ рдФрд░ - рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдкрд┐рдЫрд▓реЗ рдорд╣реАрдиреЗ рдЗрд╕реЗ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред

рд╣рдордиреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдЕрдкрдиреЗ рдбреЙрдХрд░ рдХрдВрдЯреЗрдирд░реЛрдВ рдореЗрдВ рдкреИрдХреЗрдЬреЛрдВ рдХреЛ рдЕрдкрдЧреНрд░реЗрдб рдХрд┐рдпрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ libseccomp 2.3.3 (рдбреЗрдмрд┐рдпрди рд╕реНрдЯреЗрдмрд▓ рд░реЗрдкреЛ рдореЗрдВ рд╕рдВрд╕реНрдХрд░рдг) рд╕реЗ 2.4.3 рддрдХ рдЕрдкрдЧреНрд░реЗрдб рд╢рд╛рдорд┐рд▓ рд╣реИред рдЕрдиреНрдп рд╕рд┐рд╕реНрдЯрдо рдкреИрдХреЗрдЬ рднреА рдереЗ рдЬреЛ рдЕрдкрдЧреНрд░реЗрдб рд╣реЛ рдЧрдП, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЙрдиреНрд╣реЗрдВ рд░рд┐рдХреЙрд░реНрдб рдирд╣реАрдВ рдХрд┐рдпрд╛ред рд╣рдорд╛рд░рд╛ рдХрд░реНрдиреЗрд▓ рдЕрдкрдЧреНрд░реЗрдб рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рд╕рдВрд╕реНрдХрд░рдг 4.19.0-8-amd64 рд╣реИред

рд╣рдо SCMP_ACT_TRACE , рдФрд░ рдХреЗрд╡рд▓ SCMP_ACT_ALLOW рдирд┐рдпрдореЛрдВ рд╕реЗ рдпреБрдХреНрдд рдПрдХ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдХрд┐ libseccomp рдХреЗ рдЫрджреНрдо-рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рдмрдЬрд╛рдп рджреЗрд╢реА syscall рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЬреЛрдбрд╝реЗ рдЬрд╛рддреЗ рд╣реИрдВред рд╣рдо рдПрдХ 64-рдмрд┐рдЯ рд╕рд╣рд╛рдпрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдлреЛрд░реНрдХ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ exec рд╕реЗ рдкрд╣рд▓реЗ seccomp рдлрд╝рд┐рд▓реНрдЯрд░ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИ - рдПрдХ рдФрд░ 64-рдмрд┐рдЯ рдмрд╛рдЗрдирд░реАред

рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП, seccomp_rule_add рдореИрди рдкреЗрдЬ рдкрд░ рд╕рдорд╛рди рддреНрд░реБрдЯрд┐-рдЬрд╛рдВрдЪ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдпрд╣ рд╣рдорд╛рд░реЗ seccomp рдЖрд░рдВрднреАрдХрд░рдг рджрд┐рдирдЪрд░реНрдпрд╛ рдХреА рд╕рдВрдкреВрд░реНрдгрддрд╛ рд╣реИред

рд╣рд╛рд▓рд╛рдВрдХрд┐, seccomp_load рд╣рдорд╛рд░реА рдХреЙрд▓ рдиреЗ -EINVAL рд▓реМрдЯрд╛рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ рд╣реИ, 1 / 100,000 рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЖрд░рдВрднреАрдХрд░рдг рдХреЗ рдкрд░рд┐рдорд╛рдг рдХреЗ рдХреНрд░рдо рдореЗрдВред (рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд░реВрдк рд╕реЗ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг рдЗрд╕реЗ рдбреАрдмрдЧ рдХрд░рдирд╛ рдХрдард┐рди рд╣реЛ рдЧрдпрд╛ рд╣реИред) рдЗрд╕ рд╕рдордп рдХреЗ рджреМрд░рд╛рди рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдореЗрдВ рдХреЛрдИ рдХреЛрдб рдкрд░рд┐рд╡рд░реНрддрди рдирд╣реАрдВ рд╣реБрдЖ рдерд╛ред рдлрд╝рд┐рд▓реНрдЯрд░ рдореЗрдВ рдЬреЛрдбрд╝реЗ рдЧрдП syscalls рд╕рднреА рд░рдиреЛрдВ рдореЗрдВ рд╕рдорд╛рди рд╣реИрдВред

рдХреНрдпрд╛ рдЧрд▓рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдХреНрдпрд╛ рдЧрд▓рдд рд╣реЛ рд░рд╣рд╛ рд╣реИ рдореЗрдВ рдЖрдЧреЗ рдЦреБрджрд╛рдИ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП) рдкрд░ рдХреЛрдИ рд╡рд┐рдЪрд╛рд░, рдпрд╛ рдпрджрд┐ рдпрд╣ рдХрд┐рд╕реА рддрд░рд╣ рд╕реЗ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╣реИ? рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЧрддрд┐рд╢реАрд▓ рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рд╣рд┐рд╕реНрд╕реЗ рдирд╣реАрдВ рд╣реИрдВ, рдФрд░ рдореБрдЭреЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рдорд┐рд▓рд╛ рдХрд┐ рдРрд╕рд╛ рдХреНрдпреЛрдВ рд╣реЛ рд░рд╣рд╛ рд╣реИред

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдЕрднреА рдирд╣реАрдВ, рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗред рдкреИрдЪ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рдж seccomp_export_pfc , рдпрд╣ рдЪреБрдк рд╣реЛ рдЧрдпрд╛ рд╣реИред рдХрд▓ рдореИрдВрдиреЗ рдЙрд╕ рдкреИрдЪ рдХреЛ рд╣рдорд╛рд░реЗ рд╕рднреА VMs (рдХреЗрд╡рд▓ рдПрдХ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдмрдЬрд╛рдп) рдкрд░ рдзрдХреЗрд▓ рджрд┐рдпрд╛, рдЬрдм рдпрд╣ рдЕрдВрддрддрдГ рд╣реЛрддрд╛ рд╣реИ рддреЛ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдкрдХрдбрд╝рдиреЗ рдХреА рдЙрдореНрдореАрдж рдореЗрдВред

рдореБрдЭреЗ рдЪреБрдкреНрдкреА рдЕрдЬреАрдм рд▓рдЧрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЕрднреА рдХреЗ рд▓рд┐рдП рдореИрдВ рдЗрд╕реЗ рд╕рдВрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рд╕рднреА рдбрд┐рдмрдЧрд┐рдВрдЧ/рдирд┐рд░реНрдпрд╛рдд рддрд░реНрдХ _after_ рд╡рд┐рдлрд▓ seccomp_load , рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рд╡рд┐рдлрд▓рддрд╛ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╕рднреА 15 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рд╣рд╛рдп @Xyene ,

рдРрд╕реЗ рдмрд╣реБрдд рд╕реЗ рд╕реНрдерд╛рди рдирд╣реАрдВ рд╣реИрдВ рдЬреЛ seccomp_load() рдХреЛрдб рдкрде рдореЗрдВ -EINVAL рд▓реМрдЯрд╛рддреЗ рд╣реИрдВред libseccomp v2.4.3 рдХреЛрдб рдХреА рддреНрд╡рд░рд┐рдд рдЬрд╛рдВрдЪ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдпрд╛ рддреЛ рдПрдХ рдЕрдорд╛рдиреНрдп scmp_filter_ctx рдпрд╛ рдХрд░реНрдиреЗрд▓ prctl(...) рдХреЙрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╢рд┐рдХрд╛рдпрдд рдХрд░ рд░рд╣рд╛ рд╣реИ рдЬреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИред

рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ v2.4.3 рдЖрдо рддреМрд░ рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЖрдкрдиреЗ рдЕрдкрдирд╛ рдХрд░реНрдиреЗрд▓ рдирд╣реАрдВ рдмрджрд▓рд╛ рд╣реИ, рдпрд╣ рд╕рдВрджрд┐рдЧреНрдз рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ prctl(...) рдХреЙрд▓ рд╡рд╣ рдХрд╛рд░рдг рд╣реИ рдЬреЛ рд╣рдореЗрдВ рдПрдХ рдЕрдорд╛рдиреНрдп рдлрд╝рд┐рд▓реНрдЯрд░ рд╕рдВрджрд░реНрдн рдХреА рдУрд░ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИред рдХреНрдпрд╛ рдЖрдкрдиреЗ рдЕрдкрдЧреНрд░реЗрдб рдХреЗ рдмрд╛рдж рд╕реЗ рдЕрдкрдиреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рдХреЛрдИ рдЕрдиреНрдп рдЕрдЬреАрдм рд╡реНрдпрд╡рд╣рд╛рд░ рджреЗрдЦрд╛ рд╣реИ? рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдХрд╣реАрдВ рдФрд░ рд╕реНрдореГрддрд┐ рднреНрд░рд╖реНрдЯрд╛рдЪрд╛рд░ рд╕рдорд╕реНрдпрд╛ рд╣реИ рдЬреЛ рд╕рдорд╕реНрдпрд╛ рдкреИрджрд╛ рдХрд░ рд░рд╣реА рд╣реИред

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рд╣рдореЗрд╢рд╛ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдЧрд▓рддреА libseccomp рдХреЗ рд╕рд╛рде рд╣реИ, рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рд░рд┐рд▓реАрдЬ рдХреЛ рдЪреЗрдХ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓рд╛рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рд╣рдорд╛рд░реЗ рд╕рднреА рдкреНрд░рддрд┐рдЧрдорди рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдХреНрд▓реИрдВрдЧ рдФрд░ рдХрд╡рд░рд┐рдЯреА рджреЛрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдерд┐рд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рд╡рд╛рд▓рдЧреНрд░рд┐рдВрдб рд░рди рд╢рд╛рдорд┐рд▓ рд╣реИрдВред

рд╕рд╛рде рд╣реА, рдЬрдмрдХрд┐ рдпрд╣ v2.4.3 рдХреЗ рд▓рд┐рдП рдорджрдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓рдЧрднрдЧ рддреИрдпрд╛рд░ v2.5.0 рд░рд┐рд▓реАрдЬрд╝ рдХреЗ рд▓рд┐рдП рд╣рдо рдЬрд┐рди рд╕реБрдзрд╛рд░реЛрдВ рдХреЛ рд▓рдХреНрд╖рд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рд╕реБрдзрд╛рд░ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдФрд░ рддреНрд░реБрдЯрд┐ рдХреЛрдб рдХрд╛ рдкреНрд░рдмрдВрдзрди рд╣реИред

рд╣рдордиреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдЕрдкрдиреЗ рдбреЙрдХрд░ рдХрдВрдЯреЗрдирд░реЛрдВ рдореЗрдВ рдкреИрдХреЗрдЬреЛрдВ рдХреЛ рдЕрдкрдЧреНрд░реЗрдб рдХрд┐рдпрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ libseccomp 2.3.3 (рдбреЗрдмрд┐рдпрди рд╕реНрдЯреЗрдмрд▓ рд░реЗрдкреЛ рдореЗрдВ рд╕рдВрд╕реНрдХрд░рдг) рд╕реЗ 2.4.3 рддрдХ рдЕрдкрдЧреНрд░реЗрдб рд╢рд╛рдорд┐рд▓ рд╣реИред рдЕрдиреНрдп рд╕рд┐рд╕реНрдЯрдо рдкреИрдХреЗрдЬ рднреА рдереЗ рдЬреЛ рдЕрдкрдЧреНрд░реЗрдб рд╣реЛ рдЧрдП, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЙрдиреНрд╣реЗрдВ рд░рд┐рдХреЙрд░реНрдб рдирд╣реАрдВ рдХрд┐рдпрд╛ред рд╣рдорд╛рд░рд╛ рдХрд░реНрдиреЗрд▓ рдЕрдкрдЧреНрд░реЗрдб рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рд╕рдВрд╕реНрдХрд░рдг 4.19.0-8-amd64 рд╣реИред

рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж рдХрд┐ рдЖрдкрдХрд╛ рдХреЛрдб рдФрд░ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдХрд░реНрдиреЗрд▓ рдирд╣реАрдВ рдмрджрд▓рд╛ рд╣реИред рдЗрд╕рд╕реЗ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓рдиреА рдЪрд╛рд╣рд┐рдПред

рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП, рдпрд╣ seccomp_rule_add рдореИрди рдкреЗрдЬ рдХреЗ рд╕рдорд╛рди рддреНрд░реБрдЯрд┐-рдЬрд╛рдВрдЪ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╣рдорд╛рд░реЗ seccomp рдЖрд░рдВрднреАрдХрд░рдг рджрд┐рдирдЪрд░реНрдпрд╛ рдХреА рд╕рдВрдкреВрд░реНрдгрддрд╛ рд╣реИред

рдЖрдкрдХрд╛ рдлрд╝рд┐рд▓реНрдЯрд░ рдореБрдЭреЗ рдЙрдЪрд┐рдд рд▓рдЧрддрд╛ рд╣реИред

рдХреНрдпрд╛ рдЧрд▓рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдХреНрдпрд╛ рдЧрд▓рдд рд╣реЛ рд░рд╣рд╛ рд╣реИ рдореЗрдВ рдЖрдЧреЗ рдЦреБрджрд╛рдИ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП) рдкрд░ рдХреЛрдИ рд╡рд┐рдЪрд╛рд░, рдпрд╛ рдпрджрд┐ рдпрд╣ рдХрд┐рд╕реА рддрд░рд╣ рд╕реЗ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╣реИ? рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЧрддрд┐рд╢реАрд▓ рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рд╣рд┐рд╕реНрд╕реЗ рдирд╣реАрдВ рд╣реИрдВ, рдФрд░ рдореБрдЭреЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рдорд┐рд▓рд╛ рдХрд┐ рдРрд╕рд╛ рдХреНрдпреЛрдВ рд╣реЛ рд░рд╣рд╛ рд╣реИред

рдореИрдВрдиреЗ v2.4.3 seccomp_load() рдХреЛрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рджреЗрдЦрд╛, рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреЗрд╡рд▓ рджреЛ рд╕реНрдерд╛рди рд╣реИрдВ рдЬрд╣рд╛рдВ libseccomp -EINVAL рдХрд╛ рд░рд┐рдЯрд░реНрди рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ:

рдЙрдкрд░реЛрдХреНрдд рджреЛрдиреЛрдВ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗ рдПрдХ рдЕрдорд╛рдиреНрдп рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЗ рдХрд╛рд░рдг рд╣реЛрддреА рд╣реИрдВред рдЖрдкрдХреЗ рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЛрдб рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдЕрд╕рдВрднрд╡ рд▓рдЧрддрд╛ рд╣реИред

рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ seccomp_set_mode_filter() рдореЗрдВ рдХрд░реНрдиреЗрд▓ рдХрд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░рд┐рдЯрд░реНрди рдорд╛рди -EINVAL , рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдХреБрдЫ рдФрд░ рдмрджрд▓ рдЧрдпрд╛, рдЬрд┐рд╕рд╕реЗ рд╣рдо рдЙрд╕ рд░рд╛рд╕реНрддреЗ рдкрд░ рдЧрд┐рд░ рдЧрдПред рдЖрдк рдЙрд▓реНрд▓реЗрдЦ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рдбреЙрдХрд░ рдореЗрдВ рдЪрд▓ рд░рд╣реЗ рд╣реИрдВ; рдХреНрдпрд╛ рдЖрдк рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдбреЙрдХрд░ seccomp рдлрд╝рд┐рд▓реНрдЯрд░ рдЕрдХреНрд╖рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ?

рдЕрдЧрд░ seccomp_load() рд╡рд┐рдлрд▓ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдореИрдВ рдЖрдкрдХреЗ рдХреЛрдб рдореЗрдВ рдХреБрдЫ рдФрд░ рдбрд┐рдмрдЧрд┐рдВрдЧ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рд▓реБрддреНрдл рдЙрдард╛рдКрдВрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдлрд┐рд▓реНрдЯрд░ рдХреЗ рдкреАрдПрдлрд╕реА рдФрд░/рдпрд╛ рдмреАрдкреАрдПрдл рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ рдХрд┐ рдпрд╣ рдЙрдЪрд┐рдд рд╣реИред seccomp_export_pfc() рдФрд░ seccomp_export_bpf() ред

рдореИрдВрдиреЗ v2.4.3 seccomp_load() рдХреЛрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рджреЗрдЦрд╛, рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреЗрд╡рд▓ рджреЛ рд╕реНрдерд╛рди рд╣реИрдВ рдЬрд╣рд╛рдВ libseccomp -EINVAL рдХрд╛ рд░рд┐рдЯрд░реНрди рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ:

рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ gen_bpf_generate(...) , рдпрд╛ рдиреАрдЪреЗ рдореЗрдВ рдкрд╛рдИ рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдХреЛрдИ рднреА рд╡рд┐рдлрд▓рддрд╛, src/system.c:267 рдкрд░ рдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗ -ENOMEM рдореЗрдВ sys_filter_load(...) рд╕реЗ рд╕рдВрдпреЛрдЬрд┐рдд рд╣реЛ рдЬрд╛рддреА рд╣реИред

рдореБрдЭреЗ "рд╕реНрдореГрддрд┐ рднреНрд░рд╖реНрдЯрд╛рдЪрд╛рд░!" рдкрд░ рд╡рд╛рдкрд╕ рдЖрдиреЗ рд╕реЗ рдирдлрд░рдд рд╣реИред рдЗрддрдиреА рдЬрд▓реНрджреА, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдБ рдРрд╕рд╛ рд╣реА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рддреНрд╡рд░рд┐рдд рдФрд░ рд╡рд┐рд╕реНрддреГрдд рдЙрддреНрддрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! рдЙрдиреНрд╣реЛрдВрдиреЗ рдЕрдиреНрд╡реЗрд╖рдг рдХреЗ рдХрдИ рд░рд╛рд╕реНрддреЗ рддреИрдпрд╛рд░ рдХрд┐рдП рд╣реИрдВ: рдереЛрдбрд╝рд╛_рдореБрд╕реНрдХреБрд░рд╛рддреЗ рд╣реБрдП_рдлреЗрд╕:

рдХреНрдпрд╛ рдЖрдкрдиреЗ рдЕрдкрдЧреНрд░реЗрдб рдХреЗ рдмрд╛рдж рд╕реЗ рдЕрдкрдиреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рдХреЛрдИ рдЕрдиреНрдп рдЕрдЬреАрдм рд╡реНрдпрд╡рд╣рд╛рд░ рджреЗрдЦрд╛ рд╣реИ? рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдХрд╣реАрдВ рдФрд░ рд╕реНрдореГрддрд┐ рднреНрд░рд╖реНрдЯрд╛рдЪрд╛рд░ рд╕рдорд╕реНрдпрд╛ рд╣реИ рдЬреЛ рд╕рдорд╕реНрдпрд╛ рдкреИрджрд╛ рдХрд░ рд░рд╣реА рд╣реИред

рдирд╣реАрдВ, рдмрд╕ рдпрд╣реАред рд╣рдорд╛рд░реА рдЗрдХрд╛рдИ рдФрд░ рдПрдХреАрдХрд░рдг рдкрд░реАрдХреНрд╖рдг рдЬрд╛рд░реА рд╣реИрдВ, рдФрд░ рдЗрд╕ рджреБрд░реНрд▓рдн EINVAL , рдЙрддреНрдкрд╛рджреЛрдВ рдореЗрдВ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд▓реЙрдЧ рдирд╣реАрдВ рдХреА рдЬрд╛ рд░рд╣реА рд╣реИред рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕реЗ рд╣реИрд░рд╛рди рдХрд░рддрд╛ рд╣реИ; рдореБрдЭреЗ рд╕реНрдореГрддрд┐ рднреНрд░рд╖реНрдЯрд╛рдЪрд╛рд░ рдкрд░ рднреА рд╕рдВрджреЗрд╣ рдерд╛, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕рдмреВрдд рдирд╣реАрдВ рдорд┐рд▓рд╛: рдереЛрдбрд╝рд╛_рдлреНрд░рд╛рдЗрдВрдЧ_рдлреЗрд╕:

рдереЛрдбрд╝рд╛ рдФрд░ рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП:

  • рдХрд╛рд░реНрдпрдХреНрд░рдо рдПрдХ рдкрд╛рдпрдерди рдРрдк рд╣реИ рдЬреЛ рд╕рд╛рдЗрдерди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреБрдЫ рд╕реА ++ рдореЗрдВ рдХреЙрд▓ рдХрд░ рд░рд╣рд╛ рд╣реИ (рдЬреАрдЖрдИрдПрд▓ рдЗрд╕ рд╕рдордп рдХреЗ рджреМрд░рд╛рди рдЖрдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдкрд╛рдпрдерди рдЕрдиреНрдп рдзрд╛рдЧреЗ рдкрд░ рдЖрд╡рдВрдЯрди рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ)
  • рд╕реА ++ рд╕рд╛рдЗрдб рдлреЛрд░реНрдХ, рдФрд░ рдмрдЪреНрдЪреЗ рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрди рд╕реЗ рдкрд╣рд▓реЗ рд╕реЗрдХрдореНрдк рдлрд╝рд┐рд▓реНрдЯрд░ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ
  • рдлреЛрд░реНрдХ рдХреЗ рдмрд╛рдж рд╣реЛрдиреЗ рд╡рд╛рд▓реА рд╕рднреА рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрди, рдкреВрд░реНрд╡-рдирд┐рд╖реНрдкрд╛рджрди libseccomp рд╕реЗ рд╣реА рд╣реИрдВ, seccomp_init рдЖрджрд┐ рдореЗрдВред
  • рд╕реА ++ рдХреЛрдб рдореЗрдВ рдХреЙрд▓ рдХрд░рдиреЗ рдФрд░ рдлреЛрд░реНрдХрд┐рдВрдЧ рдХреЗ рдмреАрдЪ рдареАрдХ

рдЗрд╕реЗ рдЯрд╛рдЗрдк рдХрд░рддреЗ рд╕рдордп рдореБрдЭреЗ рдПрдХ рд╡рд┐рдЪрд╛рд░ рдЖрдпрд╛: рдореИрдВрдиреЗ malloc рдмрд╛рд░реЗ рдореЗрдВ рдбрд░рд╛рд╡рдиреА рдХрд╣рд╛рдирд┐рдпрд╛рдВ рд╕реБрдиреА рд╣реИрдВ рдЬреЛ рдлреЛрд░реНрдХрд┐рдВрдЧ рдХреЗ рдмрд╛рдж рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИрдВ, рдФрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреБрдЫ libseccomp рдХреЗ рднреАрддрд░ рд╣реА рд╣реИред рдкрд╛рдпрдерди рдРрдк рд╣реА _is_ рдорд▓реНрдЯреАрдереНрд░реЗрдбреЗрдб рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рд╣рдореЗрд╢рд╛ рджреЗрд╢реА рдХреЛрдб рдореЗрдВ рд░рд╣рддреЗ рд╣реБрдП GIL рдХреЛ рд╣реЛрд▓реНрдб рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╕реБрд░рдХреНрд╖рд┐рдд (?) рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдореИрдВрдиреЗ рдХреЗрд╡рд▓ рдореЙрд▓реЛрдХ-рдЖрдлреНрдЯрд░-рдлреЛрд░реНрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдЧрддрд┐рд░реЛрдз рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реБрдирд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдБрдХрд┐ред (рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡реНрдпрд╛рдкрд╛рд░ рдХрд╛ рдЕрдЧрд▓рд╛ рдХреНрд░рдо seccomp_init et alред рдХрд╛рдВрдЯреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдХреЗрд╡рд▓ seccomp_load рдкреЛрд╕реНрдЯ-рдлреЛрд░реНрдХ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рджреЗрдЦрддрд╛ рд╣реИ рдХрд┐ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╣реЛ рд░рд╣реА рд╣реИрдВ рдпрд╛ рдирд╣реАрдВред)

рдЕрдЧрд░ seccomp_load() рд╡рд┐рдлрд▓ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдореИрдВ рдЖрдкрдХреЗ рдХреЛрдб рдореЗрдВ рдХреБрдЫ рдФрд░ рдбрд┐рдмрдЧрд┐рдВрдЧ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рд▓реБрддреНрдл рдЙрдард╛рдКрдВрдЧрд╛ред

рд╕рд▓рд╛рд╣ рдХреЗ рд▓рд┐рдпреЗ рдзрдиреНрдпрд╡рд╛рдж! рдореИрдВрдиреЗ seccomp_export_pfc рдПрдХ рдХреЙрд▓ рдЬреЛрдбрд╝рд╛ рд╣реИ, рд╕рд╛рде рд╣реА рдЗрдирдкреБрдЯ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ ( config->syscall_whitelist ) рдореЗрдВ рдбрдВрдк рдХрд┐рдпрд╛ рд╣реИред рдЕрдЧрд▓реА рдмрд╛рд░ рдпрд╣ рд╡рд┐рдлрд▓ рд╣реЛрдиреЗ рдкрд░ рдореИрдВ рдЕрдиреБрд╡рд░реНрддреА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд░реВрдВрдЧрд╛ред

рдирдорд╕реНрддреЗ @Xyene - рдЪреВрдВрдХрд┐ рд▓рдЧрднрдЧ рдПрдХ рд╕рдкреНрддрд╛рд╣ рд╣реЛ рдЧрдпрд╛ рд╣реИ, рдореИрдВ рдмрд╕ рдЬрд╛рдВрдЪрдирд╛ рдФрд░ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХрд┐ рдХреНрдпрд╛ рдХреБрдЫ рдирдпрд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдорд┐рд▓рд╛ рд╣реИ?

рдЕрднреА рдирд╣реАрдВ, рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗред рдкреИрдЪ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рдж seccomp_export_pfc , рдпрд╣ рдЪреБрдк рд╣реЛ рдЧрдпрд╛ рд╣реИред рдХрд▓ рдореИрдВрдиреЗ рдЙрд╕ рдкреИрдЪ рдХреЛ рд╣рдорд╛рд░реЗ рд╕рднреА VMs (рдХреЗрд╡рд▓ рдПрдХ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдмрдЬрд╛рдп) рдкрд░ рдзрдХреЗрд▓ рджрд┐рдпрд╛, рдЬрдм рдпрд╣ рдЕрдВрддрддрдГ рд╣реЛрддрд╛ рд╣реИ рддреЛ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдкрдХрдбрд╝рдиреЗ рдХреА рдЙрдореНрдореАрдж рдореЗрдВред

рдореБрдЭреЗ рдЪреБрдкреНрдкреА рдЕрдЬреАрдм рд▓рдЧрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЕрднреА рдХреЗ рд▓рд┐рдП рдореИрдВ рдЗрд╕реЗ рд╕рдВрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рд╕рднреА рдбрд┐рдмрдЧрд┐рдВрдЧ/рдирд┐рд░реНрдпрд╛рдд рддрд░реНрдХ _after_ рд╡рд┐рдлрд▓ seccomp_load , рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рд╡рд┐рдлрд▓рддрд╛ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдкреНрд░рдЧрддрд┐!

рдпрд╣ рдЪреБрдк рд░рд╣рдиреЗ рдХрд╛ рдХрд╛рд░рдг рдмрддрд╛рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ seccomp_export_bpf segfaulting рдерд╛ (рдХреНрдпрд╛ рдЗрд╕реЗ seccomp_load рдмрд╛рдж рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП?), рдФрд░ рдпрд╣ рдХрд╣реАрдВ рдФрд░ рд░рд┐рдкреЛрд░реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рдерд╛, рди рдХрд┐ рдЬрд╣рд╛рдВ рдореИрдВ seccomp рд╡рд┐рдлрд▓рддрд╛рдУрдВ рдХреА рддрд▓рд╛рд╢ рдореЗрдВ рдерд╛ред рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдРрд╕реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рднрд╛рдЧ рд▓рд┐рдпрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ ~ 150 рдЖрдордВрддреНрд░рдгреЛрдВ рдореЗрдВ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд░реВрдк рд╕реЗ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдХреБрдЫ рдирд▓рд╕рд╛рдЬреА рдХрд╛рд░реНрдп рдХреЗ рд╕рд╛рде рдореБрдЭреЗ рдХреБрдЫ рдХреЛрд░ рдбрдВрдк рдирд┐рдХрд╛рд▓рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдареАрдХ рд╣реИ, рдореИрдВрдиреЗ рдПрдХ рдХреЛрд░рдбрдореНрдк рдирд┐рдХрд╛рд▓рд╛, рдФрд░ рдпрд╣ рдЯреНрд░реЗрд╕ рдерд╛: https://gist.github.com/Xyene/920f1cb098784a031f53c66a2f49d167

рдпрд╣ рдереЛрдбрд╝рд╛ рд╕рдВрджрд┐рдЧреНрдз рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЬреЗрдорд▓реЛрдХ рдХреЗ realloc рд░реВрдЯреАрди рдХреЗ рдЕрдВрджрд░ рджреБрд░реНрдШрдЯрдирд╛рдЧреНрд░рд╕реНрдд рд╣реЛ рд░рд╣рд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЧреНрд▓рд┐рдм рдореЙрд▓реЛрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рдЬрд╛рддреА рд╣реИ (рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдпрд╣ рд╡рд┐рдЦрдВрдбрди рдореБрджреНрджреЛрдВ рдХреЗ рдХрд╛рд░рдг рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рджреАрд░реНрдШрдХрд╛рд▓рд┐рдХ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реИ)ред

рдЗрд╕рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдЬреЗрдорд▓реЛрдХ рдореЗрдВ рдЦреАрдВрдЪрд╛, рдЗрд╕реЗ -O0 рдФрд░ рдбрд┐рдмрдЧрд┐рдВрдЧ рдкреНрд░рддреАрдХреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛, рдФрд░ рдкреНрд░рдЬрдирди рдХреЛ рдлрд┐рд░ рд╕реЗ рдЪрд▓рд╛рдпрд╛ред рдЗрд╕ рдмрд╛рд░ рдпрд╣ рдмрд╛рдж рдХреЗ рдмрдЬрд╛рдп seccomp_load рдореЗрдВ рджреБрд░реНрдШрдЯрдирд╛рдЧреНрд░рд╕реНрдд рд╣реЛ рдЧрдпрд╛! рдореИрдВрдиреЗ рдЙрд╕ рдЯреНрд░реЗрд╕ рдХреЛ рдпрд╣рд╛рдВ рдЕрдкрд▓реЛрдб рдХрд┐рдпрд╛ рд╣реИ: https://gist.github.com/Xyene/5da56168bea337da85b2cd30704d12e

рдЙрд╕ рдЯреНрд░реЗрд╕ рдХрд╛ рдПрдХ рдЕрдВрд╢:

#9  0x00007ff962698495 in free (ptr=0x5a5a5a5a5a5a5a5a) at src/jemalloc.c:2867
No locals.
#10 0x00007ff96062d087 in _program_free (prg=prg@entry=0x7ff95e963010) at gen_bpf.c:511
No locals.
#11 0x00007ff96062f605 in gen_bpf_release (program=program@entry=0x7ff95e963010) at gen_bpf.c:1986
No locals.
#12 0x00007ff96062c04f in sys_filter_load (col=col@entry=0x7ff95e9a5000) at system.c:293
        rc = -1
        prgm = 0x7ff95e963010
#13 0x00007ff96062b666 in seccomp_load (ctx=ctx@entry=0x7ff95e9a5000) at api.c:286
        col = 0x7ff95e9a5000

рдЬреЗрдорд▓реЛрдХ рдХреЛ рдЦреЛрдЬрддреЗ рд╣реБрдП, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ 0x5a рдХрд╛ рдЙрдкрдпреЛрдЧ рдлреНрд░реА рдмрд╛рдЗрдЯреНрд╕ рдХреЛ рдлреНрд░реА рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ , рдХреНрд░реИрд╢рд┐рдВрдЧ рдХреЛрдб рдХреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд╕рд╛рде рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдореБрдХреНрдд рдХреА рдЧрдИ рдХрд┐рд╕реА рдЪреАрдЬ рдХреЛ рдореБрдХреНрдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣рд╛ рд╣реИред

gen_bpf.c:511 v2.4.3 рдореЗрдВ рд╣реИ: https://github.com/seccomp/libseccomp/blob/1dde9d94e0848e12da20602ca38032b91d521427/src/gen_bpf.c#L505 -L513

рд▓реЗрдХрд┐рди, рдЗрд╕рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рдЬреАрд╡рдирдХрд╛рд▓ рдХреЗрд╡рд▓ sys_filter_load рдХрд╛ рд╢рд░реАрд░ рд╣реИ:

https://github.com/seccomp/libseccomp/blob/1dde9d94e0848e12da20602ca38032b91d521427/src/system.c#L260 -L296

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдореБрджреНрджрд╛ рджреЗрдЦрд╛ рд╣реИред gen_bpf_generate ;

https://github.com/seccomp/libseccomp/blob/1dde9d94e0848e12da20602ca38032b91d521427/src/gen_bpf.c#L1963 -L1966

state.bpf = prgm рдЬрдм рддрдХ zmalloc рд╡рд┐рдлрд▓ рдирд╣реАрдВ рд╣реБрдЖред рдЗрд╕рдХреЗ рдмрд╛рдж, _gen_bpf_build_bpf рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ rc , state.bpf рдХреЛ NULL рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

https://github.com/seccomp/libseccomp/blob/1dde9d94e0848e12da20602ca38032b91d521427/src/gen_bpf.c#L1968 -L1971

рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЬрд╣рд╛рдВ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ rc != 0 , state.bpf рдЕрднреА рднреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ prgm рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХреЗ рд╕рдордп _state_release ред рдЗрд╕рд╕реЗ рд╕реНрдореГрддрд┐ рдХреЛ prgm рджреНрд╡рд╛рд░рд╛ рдореБрдХреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

https://github.com/seccomp/libseccomp/blob/1dde9d94e0848e12da20602ca38032b91d521427/src/gen_bpf.c#L539

рдЕрдЧрд▓рд╛, gen_bpf_generate рд╣реЛрдЧрд╛ return prgm , рдЬреЛ рдореБрдХреНрдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдЕрднреА рднреА рдПрдХ рдЧреИрд░-рд╢реВрдиреНрдп рд╕реВрдЪрдХ рд╣реИред

https://github.com/seccomp/libseccomp/blob/1dde9d94e0848e12da20602ca38032b91d521427/src/gen_bpf.c#L1971 -L1974

рд╡рд╛рдкрд╕ sys_filter_load , gen_bpf_generate рд░рд┐рдЯрд░реНрди, рдФрд░ prgm рдирд╣реАрдВ рд╣реИ- NULL рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЬрд╛рд░реА рд╣реИред

https://github.com/seccomp/libseccomp/blob/1dde9d94e0848e12da20602ca38032b91d521427/src/system.c#L265 -L267

рдЕрдВрдд рдореЗрдВ, sys_filter_load рдХреЗ рдЕрдВрдд рдореЗрдВ, gen_bpf_release рдкрд╣рд▓реЗ рд╕реЗ рдореБрдХреНрдд prgm рдкрд░ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

https://github.com/seccomp/libseccomp/blob/1dde9d94e0848e12da20602ca38032b91d521427/src/system.c#L292 -L295

рдпрд╣ рдЗрд╕ рдЪрд┐рдВрддрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпреЛрдВ _gen_bpf_build_bpf рдкрд╣рд▓реА рдмрд╛рд░ рдореЗрдВ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдХреБрдЫ рдмреБрд░рд╛ рд▓рдЧрддрд╛ рд╣реИ рдЬреЛ рдРрд╕рд╛ рд╣реЛрдиреЗ рдкрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдВрднрд╡рддрдГ https://github.com/seccomp/libseccomp/commit/3a1d1c977065f204b96293cccfe7d3e5aa0d7ace рдХреЗ рджреБрд╖реНрдкреНрд░рднрд╛рд╡ рдХреЗ рд░реВрдк рдореЗрдВ рддрдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛

рдЙрд╕ рдорд╛рдорд▓реЗ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП рдЬрд╣рд╛рдВ _state_release рдкрд░ рдХреЙрд▓ рдХреЗ рд╕рдордп rc != 0, State.bpf рдЕрднреА рднреА prgm рдкрд░ рд╕реЗрдЯ рд╣реИред рдЗрд╕рд╕реЗ prgm рджреНрд╡рд╛рд░рд╛ рдмрддрд╛рдИ рдЧрдИ рдореЗрдореЛрд░реА рдореБрдХреНрдд рд╣реЛ рдЬрд╛рдПрдЧреАред

рдЖрд╣ рд╣рд╛! рдЕрдЪреНрдЫрд╛ рдХреИрдЪ @Xyene!

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЗрд╕реЗ 3a1d1c977065f204b96293cccfe7d3e5aa0d7ace рд╕реЗ рдЖрдЧреЗ рдареАрдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдореБрдЭреЗ рдЗрд╕ рдкрд░ рдПрдХ рдорд┐рдирдЯ рдХреЗ рд▓рд┐рдП рд╕реЛрдЪрдиреЗ рджреЗрдВ ... рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдлрд┐рдХреНрд╕ рдмрд╣реБрдд рдХрдард┐рди рд╣реЛрдЧрд╛ ... рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдореИрдВ рдкреАрдЖрд░ рдХреЗ рд╕рд╛рде рдЖ рд╕рдХрддрд╛ рд╣реВрдВред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЗрд╕реЗ 3a1d1c9 рд╕реЗ рдЖрдЧреЗ рдареАрдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдореБрдЭреЗ рдЗрд╕ рдкрд░ рдПрдХ рдорд┐рдирдЯ рдХреЗ рд▓рд┐рдП рд╕реЛрдЪрдиреЗ рджреЗрдВ ... рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдлрд┐рдХреНрд╕ рдмрд╣реБрдд рдХрдард┐рди рд╣реЛрдЧрд╛ ... рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдореИрдВ рдкреАрдЖрд░ рдХреЗ рд╕рд╛рде рдЖ рд╕рдХрддрд╛ рд╣реВрдВред

рдУрд╣, рдЬрдм рдореИрдВрдиреЗ рд▓рд┐рдЦрд╛ рдерд╛ рддреЛ рдореИрдВ рдкреБрд░рд╛рдирд╛ рдХреЛрдб рджреЗрдЦ рд░рд╣рд╛ рдерд╛; рд╣рд╛рдВ, рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ 3a1d1c9 рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЗрд╕реЗ рдареАрдХ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рд░рд┐рд▓реАрдЬ-2.4 рд╢рд╛рдЦрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреИрдЪ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдореИрдВ рдЕрдм рдЙрд╕ рдкрд░ рдХрд╛рдо рдХрд░реВрдВрдЧрд╛ред

_(рдореЗрдЯрд╛: рдЬреИрд╕реЗ-рдЬреИрд╕реЗ рдореИрдВ рдЖрдЧреЗ рдмрдврд╝реВрдВрдЧрд╛, рдореИрдВ рдЗрд╕ рд╕рдВрджреЗрд╢ рдХреЛ рдЕрдкрдиреЗ рдирд┐рд╖реНрдХрд░реНрд╖реЛрдВ рдХреЗ рд╕рд╛рде рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦреВрдВрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдореЗрд░реЗ рдкрд╛рд╕ рдЖрдк рд▓реЛрдЧреЛрдВ рдХреЛ рдИрдореЗрд▓ рдХрд┐рдП рдмрд┐рдирд╛ рдЙрдиреНрд╣реЗрдВ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣реАрдВ рд╣реИ :)_

рдареАрдХ рд╣реИ, 2.4.3 рдкрд░ рд╡рд╛рдкрд╕ рдкреИрдЪ рд▓рд╛рдЧреВ рд╣реЛрдиреЗ рдХреЗ рд╕рд╛рде, рдореИрдВ рдЙрд╕ рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЛ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реВрдВ рдЬреЛ рд╡рд┐рдлрд▓ рд╣реЛ рд░рд╣рд╛ рдерд╛: рд▓рд┐рдВрдХ ред

рд░рд┐рдкреЛрд░реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдХрд╛рд░рдг рдЕрдм ENOMEM рдмрдЬрд╛рдп EINVAL , рдЬреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╣реИ рдХрд┐ _gen_bpf_build_bpf рд╡рд┐рдлрд▓ рд╣реЛ рд░рд╣рд╛ рд╣реИ рдФрд░ NULL рдкреНрд░реЛрдЧреНрд░рд╛рдо рд▓реМрдЯрд╛ рд░рд╣рд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдкреАрдПрдлрд╕реА рдареАрдХ рдкреНрд░рд┐рдВрдЯ рдХрд░рддрд╛ рд╣реИред Seccomp рдХреЛрдб рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд░рд┐рдЯрд░реНрди рдорд╛рди рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП _gen_bpf_build_bpf рд╢реЛ EFAULT рдХрд╛рд░рдг рдХреЗ рд░реВрдк рдореЗрдВред

рдПрдХ рддреНрд╡рд░рд┐рдд рд╣реИрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдореИрдВ :%s/return -EFAULT/abort() рд╕реЗ рдЕрдзрд┐рдХ src/gen_bpf.c , рдФрд░ рдЗрд╕ рд╕реНрдЯреИрдХ рдЯреНрд░реЗрд╕ рдХреЛ рдирд┐рдХрд╛рд▓рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛:

EFAULT рд╕реНрдЯреИрдХрдЯреНрд░реЗрд╕

(gdb) bt full
#0  __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50
        set = {__val = {0, 140084028365964, 140083248439464, 140083248438968, 140083248431088, 140084028368143, 28659884033, 140083965300736, 
            140083248439464, 140083248438968, 140083248431088, 140084028351031, 140084019988760, 140083248439624, 140083248431200, 140084028372597}}
        pid = <optimized out>
        tid = <optimized out>
        ret = <optimized out>
#1  0x00007f67daa4d55b in __GI_abort () at abort.c:79
        save_stage = 1
        act = {__sigaction_handler = {sa_handler = 0x7f67d6f3eec0, sa_sigaction = 0x7f67d6f3eec0}, sa_mask = {__val = {140083965300736, 
              140083965300736, 0, 0, 140083248438968, 140083248438968, 140083248439464, 140083248431504, 140084028417173, 140083964793344, 
              140083965300736, 140083248431552, 140083994791895, 140083248431552, 140083994787642, 140083965300736}}, sa_flags = -1404894496, 
          sa_restorer = 0x0}
        sigs = {__val = {32, 0 <repeats 15 times>}}
#2  0x00007f67d8bfd455 in _gen_bpf_build_bpf (state=0x7f67ac4302e0, col=0x7f67d6f63040) at gen_bpf.c:1943
        rc = 0
        iter = 1
        h_val = 1425818561
        res_cnt = 0
        jmp_len = 0
        arch_x86_64 = 0
        arch_x32 = -1
        instr = {op = 32, jt = {tgt = {imm_j = 0 '\000', imm_k = 0, hash = 0, db = 0x0, blk = 0x0, nxt = 0}, type = TGT_NONE}, jf = {tgt = {
              imm_j = 0 '\000', imm_k = 0, hash = 0, db = 0x0, blk = 0x0, nxt = 0}, type = TGT_NONE}, k = {tgt = {imm_j = 4 '\004', imm_k = 4, 
              hash = 4, db = 0x4, blk = 0x4, nxt = 4}, type = TGT_K}}
        i_iter = 0x7f67d6fdcb60
        b_badarch = 0x7f67d6fd9000
        b_default = 0x7f67d6fd9060
        b_head = 0x7f67d6fda1a0
        b_tail = 0x7f67d6fd9000
        b_iter = 0x0
        b_new = 0x7f67d6fe3300
        b_jmp = 0x0
        db_secondary = 0x0
        pseudo_arch = {token = 0, token_bpf = 0, size = ARCH_SIZE_UNSPEC, endian = ARCH_ENDIAN_LITTLE, syscall_resolve_name = 0x0, 
          syscall_resolve_num = 0x0, syscall_rewrite = 0x0, rule_add = 0x0}
#3  0x00007f67d8bfd560 in gen_bpf_generate (col=0x7f67d6f63040) at gen_bpf.c:1971
        rc = 0
        state = {htbl = {0x0 <repeats 256 times>}, attr = 0x7f67d6f63044, bad_arch_hsh = 889798935, def_hsh = 742199527, arch = 0x7f67ac4301e0, 
          bpf = 0x7f67d6f64010}
        prgm = 0x7f67d6f64010
#4  0x00007f67d8bf64a7 in sys_filter_load (col=0x7f67d6f63040) at system.c:265
        rc = 32615
        prgm = 0x0
#5  0x00007f67d8bf4f10 in seccomp_load (ctx=0x7f67d6f63040) at api.c:287
        col = 0x7f67d6f63040

рдпрд╣ рд▓рд╛рдЗрди 1943 рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИ:

https://github.com/seccomp/libseccomp/blob/1dde9d94e0848e12da20602ca38032b91d521427/src/gen_bpf.c#L1935 -L1943

рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреА рдкреНрд░рдХреГрддрд┐ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдХрд┐рд╕реА рднреА рд╕рд╣рд╛рдпрдХ рд╕рдорд╛рд░реЛрд╣ рдореЗрдВ рдХрд┐рд╕реА рднреА EFAULT рдХреЛ рдмрд╛рд╣рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдкрд╣рд▓реЗ рдирд┐рд░рд╕реНрдд рд╣реЛ рдЬрд╛рддреЗред

рдЗрд╕рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдЗрд╕реЗ HEAD рдХреЗ рд╕рд╛рде рдкреБрди: рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ - рдпрд╣ рдЕрднреА рднреА рд╣реЛрддрд╛ рд╣реИред рдЕрдЧрд▓рд╛, %s:/goto build_bpf_free_blks/abort() рдФрд░ рджреЛрд╣рд░рд╛рдПрдВред рдХрд╛рд░рдг рдерд╛:

https://github.com/seccomp/libseccomp/blob/34bf78abc9567b66c72dbe67e7f243072162a25f/src/gen_bpf.c#L2219 -L2220

рд╢реБрдХреНрд░ рд╣реИ рдХрд┐ рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдЫреЛрдЯрд╛ рдерд╛, рдФрд░ рдЗрд╕рдореЗрдВ рдХреЗрд╡рд▓ рдХреБрдЫ рд╣реА рд╡рд┐рдлрд▓рддрд╛ рдмрд┐рдВрджреБ рдереЗред рдмрд╛рдж рдореЗрдВ abort рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХрд╛ рдПрдХ рдФрд░ рджреМрд░;

рдирд┐рд╢рд╛рди

(gdb) bt full
#0  __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50
        set = {__val = {0, 140050183343588, 0, 448, 140049402494880, 140049402509040, 140049402494832, 140050183342988, 140049402495088, 
            140049402509040, 140049402494896, 140050183343588, 4294967296, 140049402509040, 140049402509040, 140049402509040}}
        pid = <optimized out>
        tid = <optimized out>
        ret = <optimized out>
#1  0x00007f5ff953055b in __GI_abort () at abort.c:79
        save_stage = 1
        act = {__sigaction_handler = {sa_handler = 0x7f5ff595d260, sa_sigaction = 0x7f5ff595d260}, sa_mask = {__val = {139642271694862, 
              140050119389792, 0, 0, 140049402502840, 0, 140049402503336, 140049402502888, 140049402502840, 112, 384, 140049402502840, 140050149861504, 
              140049402495328, 140050149857273, 392}}, sa_flags = 448, sa_restorer = 0x7f5ff595d240}
        sigs = {__val = {32, 0 <repeats 15 times>}}
#2  0x00007f5ff76edee5 in _bpf_append_blk (prg=0x7f5ff5964010, blk=0x7f5ff59df1a0) at gen_bpf.c:452
        rc = -12
        i_new = 0x0
        i_iter = 0x7f5ff59fa178
        old_cnt = 48
        iter = 1
#3  0x00007f5ff76f3716 in _gen_bpf_build_bpf (state=0x7f5fcae302d0, col=0x7f5ff59c5000) at gen_bpf.c:2223
        rc = 0
        iter = 1
        h_val = 1425818561
        res_cnt = 0
        jmp_len = 0
        arch_x86_64 = 0
        arch_x32 = -1
        instr = {op = 32, jt = {tgt = {imm_j = 0 '\000', imm_k = 0, hash = 0, db = 0x0, blk = 0x0, nxt = 0}, type = TGT_NONE}, jf = {tgt = {
              imm_j = 0 '\000', imm_k = 0, hash = 0, db = 0x0, blk = 0x0, nxt = 0}, type = TGT_NONE}, k = {tgt = {imm_j = 4 '\004', imm_k = 4, 
              hash = 4, db = 0x4, blk = 0x4, nxt = 4}, type = TGT_K}}
        i_iter = 0x7f5ff59e1b60
        b_badarch = 0x7f5ff59de000
        b_default = 0x7f5ff59de060
        b_head = 0x7f5ff59df1a0
        b_tail = 0x7f5ff59de000
        b_iter = 0x7f5ff59df1a0
        b_new = 0x7f5ff59e8300
        b_jmp = 0x7f5ff59df0e0
        db_secondary = 0x0
        pseudo_arch = {token = 0, token_bpf = 0, size = ARCH_SIZE_UNSPEC, endian = ARCH_ENDIAN_LITTLE, syscall_resolve_name = 0x0, 
          syscall_resolve_num = 0x0, syscall_rewrite = 0x0, rule_add = 0x0}
#4  0x00007f5ff76f3874 in gen_bpf_generate (col=0x7f5ff59c5000, prgm_ptr=0x7f5fcae30b40) at gen_bpf.c:2270
        rc = 0
        state = {htbl = {0x0, 0x7f5ff593ef80, 0x7f5ff593efe0, 0x7f5ff593efc0, 0x0, 0x7f5ff595d000, 0x7f5ff593ef60, 0x7f5ff593ef00, 
            0x0 <repeats 248 times>}, attr = 0x7f5ff59c5004, bad_arch_hsh = 889798935, def_hsh = 742199527, bpf = 0x7f5ff5964010, 
          arch = 0x7f5fcae301c0, b_head = 0x7f5ff59e8300, b_tail = 0x7f5ff59de120, b_new = 0x7f5ff59e8300}
        prgm = <optimized out>
#5  0x00007f5ff76eb275 in sys_filter_load (col=0x7f5ff59c5000, rawrc=false) at system.c:307
        rc = 0
        prgm = 0x0
#6  0x00007f5ff76e9505 in seccomp_load (ctx=0x7f5ff59c5000) at api.c:386
        col = 0x7f5ff59c5000
        rawrc = false

https://github.com/seccomp/libseccomp/blob/34bf78abc9567b66c72dbe67e7f243072162a25f/src/gen_bpf.c#L449 -L452

рддреЛ рдпрд╣ рд╣реИ realloc рдлрд┐рд░ рд╕реЗ рдирд╛рдХрд╛рдо рд░рд╣рдиреЗ рдХреЗ рд▓рд┐рдП, рдФрд░ _bpf_append_blk рд▓реМрдЯрд╛ рд░рд╣рд╛ рд╣реИ -ENOMEM рдХрд┐ рдХреЗ рдиреАрдЪреЗ рджрдм рдЬрд╛рддрд╛ рд╣реИ _gen_bpf_build_bpf рдФрд░ рдореЗрдВ рдмрджрд▓ рдЧрдпрд╛ -EFAULT ред рдпрд╣ рдХреЛрдИ рдмрдбрд╝реА рдмрд╛рдд рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ рдЖрдкрдиреЗ рдХрд╣рд╛ рд╣реИ рдХрд┐ рдмреЗрд╣рддрд░ рддреНрд░реБрдЯрд┐ рд░рд┐рдкреЛрд░реНрдЯрд┐рдВрдЧ 2.5 рдХрд╛ рд▓рдХреНрд╖реНрдп рд╣реИ, рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рдореИрдВ рдЗрд╕рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░реВрдВрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЗрд╕ рджрд╛рдпрд░реЗ рдореЗрдВ рджрд┐рдЦрддрд╛ рд╣реИ: рдереЛрдбрд╝рд╛_рд╕реНрдорд╛рдЗрд▓рд┐рдВрдЧ_рдлреЗрд╕:

GDB рдХреЗ рд╕рд╛рде рдХреБрдЫ рдкреНрд░рд╣рд╛рд░:

(gdb) f 2
#2  0x00007f5ff76edee5 in _bpf_append_blk (prg=0x7f5ff5964010, blk=0x7f5ff59df1a0) at gen_bpf.c:452
452         abort();
(gdb) info args
prg = 0x7f5ff5964010
blk = 0x7f5ff59df1a0
(gdb) print prg->blks
$4 = (bpf_instr_raw *) 0x7f5ff59fa000
(gdb) x/32bx &prg->blks
0x7f5ff5964018: 0x00    0xa0    0x9f    0xf5    0x5f    0x7f    0x00    0x00
0x7f5ff5964020: 0x5a    0x5a    0x5a    0x5a    0x5a    0x5a    0x5a    0x5a
0x7f5ff5964028: 0x5a    0x5a    0x5a    0x5a    0x5a    0x5a    0x5a    0x5a
0x7f5ff5964030: 0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00
(gdb) print ((prg)->blk_cnt * sizeof(*((prg)->blks)))
$5 = 392
(gdb) print prg->blk_cnt
$6 = 49

рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдЖрд╡рдВрдЯрдХ рд╡рд┐рдлрд▓рддрд╛ рдХреА рддрд░рд╣ рджрд┐рдЦрдиреЗ рд▓рдЧрддрд╛ рд╣реИ ...

рдЖрд╣, рдпрд╣ рдХрд╣рд╛рдиреА рдЕрдВрдд рдореЗрдВ рдЕрдкрдиреЗ _рдереНрд░рд┐рд▓рд┐рдВрдЧ_ рдирд┐рд╖реНрдХрд░реНрд╖ рдкрд░ рдкрд╣реБрдВрдЪ рдЧрдИ рд╣реИ - рдореБрдЭреЗ рдкрддрд╛ рдЪрд▓ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ, рдФрд░ рдПрдХ рд╕реБрдзрд╛рд░ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд┐рдпрд╛ рд╣реИ: рдереЛрдбрд╝рд╛_рд╕реНрдорд╛рдЗрд▓рд┐рдВрдЧ_рдлреЗрд╕:

рдЪреВрдВрдХрд┐ рдпрд╣ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдХрд╣рд╛рдиреА рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╣рд╛рдБ рдпрд╣ рд╣реИ:

рдореБрдЦреНрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЬреЛ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХреЛ рдХрд╛рдЯрддреА рд╣реИ рд╡рд╣ рдЖрдорддреМрд░ рдкрд░ ~ 80mb RSS рдкрд░ рдмреИрдарддреА рд╣реИред рдЗрд╕рдХреЗ рдХрд╛рдВрдЯреЗ рдХреЗ рдмрд╛рдж, рдпрд╣ рд╕реНрдореГрддрд┐ рдЙрдкрдпреЛрдЧ рдХреЛ rlimit рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдХрднреА-рдХрднреА 64 рдПрдордмреА рддрдХред рдпрд╣ рдЗрд╕реЗ рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд░рдЦрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдЗрд╕рдХрд╛ рд╡рд░реНрддрдорд╛рди рдореЗрдореЛрд░реА рдЙрдкрдпреЛрдЧ рдЗрд╕рдХреА рд╕реАрдорд╛ рд╕реЗ рдЕрдзрд┐рдХ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреА рдЕрдиреБрдорддрд┐ рд╣реИ rlimit ред _рдЕрдзрд┐рдХрд╛рдВрд╢_ рд╕рдордп, рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрдХ рдХреЗ рдкрд╛рд╕ рдХрд░реНрдиреЗрд▓ рд╕реЗ рдЕрдзрд┐рдХ рдЕрдиреБрд░реЛрдз рдХрд┐рдП рдмрд┐рдирд╛ libseccomp рдХреЗ рдЖрд░рдВрднреАрдХрд░рдг рд░реВрдЯреАрди рдХреА рд╕реЗрд╡рд╛ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдЦрд╛рд▓реА рдореЗрдореЛрд░реА рд╣реЛрдЧреАред рд▓реЗрдХрд┐рди рдЬрдм рдпрд╣ _рдирд╣реАрдВ_ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдХреНрд╖реЗрддреНрд░ рдпрд╛ рдХреБрдЫ рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рди рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рдХрд░реНрдиреЗрд▓ рдЗрд╕реЗ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдкрдиреА рд╕реАрдорд╛ рд╕реЗ рдЕрдзрд┐рдХ рд╣реИред

2.4.3 рдореЗрдВ, рд╕реНрдореГрддрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рдпрд╣ рд╡рд┐рдлрд▓рддрд╛ EINVAL рдореЗрдВ рдкреНрд░рдХрдЯ рд╣реБрдИ рдФрд░ рдПрдХ рдбрдмрд▓-рдлреНрд░реАред рдорд╛рд╕реНрдЯрд░ рдкреЛрд╕реНрдЯ рдореЗрдВ- https://github.com/seccomp/libseccomp/commit/3a1d1c977065f204b96293cccfe7d3e5aa0d7ace , рдЗрд╕рдХреЗ рдмрдЬрд╛рдп EFAULT рдХреА рд╕реВрдЪрдирд╛ рджреА рдЧрдИ рд╣реИред https://github.com/seccomp/libseccomp/pull/257 рд▓рд╛рдЧреВ рд╣реЛрдиреЗ рдХреЗ рд╕рд╛рде, ENOMEM рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд░рд┐рдкреЛрд░реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдРрд╕рд╛ рдмрд╣реБрдд рдХрдо рд╣реЛрдиреЗ рдХрд╛ рдХрд╛рд░рдг рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ: рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЗрд╕ рдмрд╛рдд рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЖрд╡рдВрдЯрдХ рдХреЗ рдкрд╛рд╕ рдХрд░реНрдиреЗрд▓ рд╕реЗ рдЕрдзрд┐рдХ рдЕрдиреБрд░реЛрдз рдХрд┐рдП рдмрд┐рдирд╛ рдмреАрдкреАрдПрдл рдкреНрд░реЛрдЧреНрд░рд╛рдо рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдореЗрдореЛрд░реА рд╣реИред рд╡рд┐рдЦрдВрдбрди рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЧреНрд▓рд┐рдм рдХрд╛ рдЖрд╡рдВрдЯрдХ рдЕрдзрд┐рдХ рдвреАрд▓рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХреЗ рд╕рд╛рде рдРрд╕рд╛ рдХрднреА рдирд╣реАрдВ рд╣реБрдЖред jemalloc рд╕рдЦреНрдд рд╕реАрдорд╛ рд░рдЦрддрд╛ рд╣реИ, рдФрд░ seccomp_load рджреМрд░рд╛рди рд╕реНрдореГрддрд┐ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреА рдмрдврд╝рддреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИ - рдкрд░рд┐рдгрд╛рдореА рд╡рд┐рдлрд▓рддрд╛рдУрдВ рдХреЛ рдиреЛрдЯрд┐рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд░реЛрдзрд┐рдд рд╣реЛ рд░рд╣рд╛ рд╣реИред

рдлрд┐рд░, рд╕рднреА setrlimit рдХреЙрд▓ рдХреЛ _after_ seccomp_load рдкрд░ рд▓реЗ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд┐рдХреНрд╕ рдмрд╕ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдкрд░, realloc рдЕрдм _bpf_append_blk рдореЗрдВ рд╡рд┐рдлрд▓ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдлрд╝рд┐рд▓реНрдЯрд░ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд▓реЛрдб рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЛ рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ setrlimit , рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рд╕реНрд╡реАрдХрд╛рд░реНрдп рдерд╛ред рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдпрддрдГ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдорд╕реНрдпрд╛ https://github.com/seccomp/libseccomp/issues/123 рдЬреИрд╕реА рдХрд┐рд╕реА рдЪреАрдЬрд╝ рд╕реЗ рд╣рд▓ рд╣реЛ рдЬрд╛рдПрдЧреА

@pcmoore , @drakenclimber - рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдбреАрдмрдЧ рдХрд░рдиреЗ рдореЗрдВ рдЖрдкрдХреА рд╕рднреА рдорджрдж рдХреЗ рд▓рд┐рдП рдлрд┐рд░ рд╕реЗ рдзрдиреНрдпрд╡рд╛рдж! рдореБрдЭреЗ рдЦреБрд╢реА рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рдЕрдм рдЕрдкрдиреЗ рдкреАрдЫреЗ рд░рдЦ рд╕рдХрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЗ рд╕рдВрдХреЗрдд рд╡рд╣рд╛рдВ рдкрд╣реБрдВрдЪрдиреЗ рдореЗрдВ рдЕрдореВрд▓реНрдп рдереЗ: рд╕реНрдорд╛рдЗрд▓реА:

рдЗрд╕ рдмрдЧ рдХреЛ https://github.com/seccomp/libseccomp/commit/c0a6e6fd15f74c429a0b74e0dfd4de5a29aaebd рджреНрд╡рд╛рд░рд╛ рдареАрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

alban picture alban  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

pcmoore picture pcmoore  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

erdumbledore picture erdumbledore  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

oxr463 picture oxr463  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

varqox picture varqox  ┬╖  23рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ