рдирдорд╕реНрддреЗ,
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, 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 рд╕рднреА рд░рдиреЛрдВ рдореЗрдВ рд╕рдорд╛рди рд╣реИрдВред
рдХреНрдпрд╛ рдЧрд▓рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдХреНрдпрд╛ рдЧрд▓рдд рд╣реЛ рд░рд╣рд╛ рд╣реИ рдореЗрдВ рдЖрдЧреЗ рдЦреБрджрд╛рдИ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП) рдкрд░ рдХреЛрдИ рд╡рд┐рдЪрд╛рд░, рдпрд╛ рдпрджрд┐ рдпрд╣ рдХрд┐рд╕реА рддрд░рд╣ рд╕реЗ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╣реИ? рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЧрддрд┐рд╢реАрд▓ рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рд╣рд┐рд╕реНрд╕реЗ рдирд╣реАрдВ рд╣реИрдВ, рдФрд░ рдореБрдЭреЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рдорд┐рд▓рд╛ рдХрд┐ рдРрд╕рд╛ рдХреНрдпреЛрдВ рд╣реЛ рд░рд╣рд╛ рд╣реИред
рд╣рд╛рдп @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_load()
рд▓рд╛рдЗрди 283 . рдкрд░_gen_bpf_build_bpf()
рд▓рд╛рдЗрди рдкрд░ рдЙрдкрд░реЛрдХреНрдд рджреЛрдиреЛрдВ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗ рдПрдХ рдЕрдорд╛рдиреНрдп рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЗ рдХрд╛рд░рдг рд╣реЛрддреА рд╣реИрдВред рдЖрдкрдХреЗ рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЛрдб рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдЕрд╕рдВрднрд╡ рд▓рдЧрддрд╛ рд╣реИред
рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ seccomp_set_mode_filter()
рдореЗрдВ рдХрд░реНрдиреЗрд▓ рдХрд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░рд┐рдЯрд░реНрди рдорд╛рди -EINVAL
, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдХреБрдЫ рдФрд░ рдмрджрд▓ рдЧрдпрд╛, рдЬрд┐рд╕рд╕реЗ рд╣рдо рдЙрд╕ рд░рд╛рд╕реНрддреЗ рдкрд░ рдЧрд┐рд░ рдЧрдПред рдЖрдк рдЙрд▓реНрд▓реЗрдЦ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рдбреЙрдХрд░ рдореЗрдВ рдЪрд▓ рд░рд╣реЗ рд╣реИрдВ; рдХреНрдпрд╛ рдЖрдк рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдбреЙрдХрд░ seccomp рдлрд╝рд┐рд▓реНрдЯрд░ рдЕрдХреНрд╖рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ?
рдЕрдЧрд░ seccomp_load()
рд╡рд┐рдлрд▓ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдореИрдВ рдЖрдкрдХреЗ рдХреЛрдб рдореЗрдВ рдХреБрдЫ рдФрд░ рдбрд┐рдмрдЧрд┐рдВрдЧ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рд▓реБрддреНрдл рдЙрдард╛рдКрдВрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдлрд┐рд▓реНрдЯрд░ рдХреЗ рдкреАрдПрдлрд╕реА рдФрд░/рдпрд╛ рдмреАрдкреАрдПрдл рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ рдХрд┐ рдпрд╣ рдЙрдЪрд┐рдд рд╣реИред seccomp_export_pfc()
рдФрд░ seccomp_export_bpf()
ред
рдореИрдВрдиреЗ v2.4.3
seccomp_load()
рдХреЛрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рджреЗрдЦрд╛, рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреЗрд╡рд▓ рджреЛ рд╕реНрдерд╛рди рд╣реИрдВ рдЬрд╣рд╛рдВ libseccomp-EINVAL
рдХрд╛ рд░рд┐рдЯрд░реНрди рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ:
seccomp_load()
рд▓рд╛рдЗрди 283 . рдкрд░_gen_bpf_build_bpf()
рд▓рд╛рдЗрди 1657 . рдкрд░
рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ gen_bpf_generate(...)
, рдпрд╛ рдиреАрдЪреЗ рдореЗрдВ рдкрд╛рдИ рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдХреЛрдИ рднреА рд╡рд┐рдлрд▓рддрд╛, src/system.c:267 рдкрд░ рдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗ -ENOMEM рдореЗрдВ sys_filter_load(...)
рд╕реЗ рд╕рдВрдпреЛрдЬрд┐рдд рд╣реЛ рдЬрд╛рддреА рд╣реИред
рдореБрдЭреЗ "рд╕реНрдореГрддрд┐ рднреНрд░рд╖реНрдЯрд╛рдЪрд╛рд░!" рдкрд░ рд╡рд╛рдкрд╕ рдЖрдиреЗ рд╕реЗ рдирдлрд░рдд рд╣реИред рдЗрддрдиреА рдЬрд▓реНрджреА, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдБ рдРрд╕рд╛ рд╣реА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рддреНрд╡рд░рд┐рдд рдФрд░ рд╡рд┐рд╕реНрддреГрдд рдЙрддреНрддрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! рдЙрдиреНрд╣реЛрдВрдиреЗ рдЕрдиреНрд╡реЗрд╖рдг рдХреЗ рдХрдИ рд░рд╛рд╕реНрддреЗ рддреИрдпрд╛рд░ рдХрд┐рдП рд╣реИрдВ: рдереЛрдбрд╝рд╛_рдореБрд╕реНрдХреБрд░рд╛рддреЗ рд╣реБрдП_рдлреЗрд╕:
рдХреНрдпрд╛ рдЖрдкрдиреЗ рдЕрдкрдЧреНрд░реЗрдб рдХреЗ рдмрд╛рдж рд╕реЗ рдЕрдкрдиреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рдХреЛрдИ рдЕрдиреНрдп рдЕрдЬреАрдм рд╡реНрдпрд╡рд╣рд╛рд░ рджреЗрдЦрд╛ рд╣реИ? рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдХрд╣реАрдВ рдФрд░ рд╕реНрдореГрддрд┐ рднреНрд░рд╖реНрдЯрд╛рдЪрд╛рд░ рд╕рдорд╕реНрдпрд╛ рд╣реИ рдЬреЛ рд╕рдорд╕реНрдпрд╛ рдкреИрджрд╛ рдХрд░ рд░рд╣реА рд╣реИред
рдирд╣реАрдВ, рдмрд╕ рдпрд╣реАред рд╣рдорд╛рд░реА рдЗрдХрд╛рдИ рдФрд░ рдПрдХреАрдХрд░рдг рдкрд░реАрдХреНрд╖рдг рдЬрд╛рд░реА рд╣реИрдВ, рдФрд░ рдЗрд╕ рджреБрд░реНрд▓рдн EINVAL
, рдЙрддреНрдкрд╛рджреЛрдВ рдореЗрдВ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд▓реЙрдЧ рдирд╣реАрдВ рдХреА рдЬрд╛ рд░рд╣реА рд╣реИред рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕реЗ рд╣реИрд░рд╛рди рдХрд░рддрд╛ рд╣реИ; рдореБрдЭреЗ рд╕реНрдореГрддрд┐ рднреНрд░рд╖реНрдЯрд╛рдЪрд╛рд░ рдкрд░ рднреА рд╕рдВрджреЗрд╣ рдерд╛, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕рдмреВрдд рдирд╣реАрдВ рдорд┐рд▓рд╛: рдереЛрдбрд╝рд╛_рдлреНрд░рд╛рдЗрдВрдЧ_рдлреЗрд╕:
рдереЛрдбрд╝рд╛ рдФрд░ рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП:
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
рдХрд╛ рд╢рд░реАрд░ рд╣реИ:
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдореБрджреНрджрд╛ рджреЗрдЦрд╛ рд╣реИред gen_bpf_generate
;
state.bpf = prgm
рдЬрдм рддрдХ zmalloc
рд╡рд┐рдлрд▓ рдирд╣реАрдВ рд╣реБрдЖред рдЗрд╕рдХреЗ рдмрд╛рдж, _gen_bpf_build_bpf
рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ rc
, state.bpf
рдХреЛ NULL
рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЬрд╣рд╛рдВ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ rc != 0
, state.bpf
рдЕрднреА рднреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ prgm
рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХреЗ рд╕рдордп _state_release
ред рдЗрд╕рд╕реЗ рд╕реНрдореГрддрд┐ рдХреЛ prgm
рджреНрд╡рд╛рд░рд╛ рдореБрдХреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдЕрдЧрд▓рд╛, gen_bpf_generate
рд╣реЛрдЧрд╛ return prgm
, рдЬреЛ рдореБрдХреНрдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдЕрднреА рднреА рдПрдХ рдЧреИрд░-рд╢реВрдиреНрдп рд╕реВрдЪрдХ рд╣реИред
рд╡рд╛рдкрд╕ sys_filter_load
, gen_bpf_generate
рд░рд┐рдЯрд░реНрди, рдФрд░ prgm
рдирд╣реАрдВ рд╣реИ- NULL
рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЬрд╛рд░реА рд╣реИред
рдЕрдВрдд рдореЗрдВ, sys_filter_load
рдХреЗ рдЕрдВрдд рдореЗрдВ, gen_bpf_release
рдкрд╣рд▓реЗ рд╕реЗ рдореБрдХреНрдд prgm
рдкрд░ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдпрд╣ рдЗрд╕ рдЪрд┐рдВрддрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпреЛрдВ _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 рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИ:
рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреА рдкреНрд░рдХреГрддрд┐ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдХрд┐рд╕реА рднреА рд╕рд╣рд╛рдпрдХ рд╕рдорд╛рд░реЛрд╣ рдореЗрдВ рдХрд┐рд╕реА рднреА EFAULT
рдХреЛ рдмрд╛рд╣рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдкрд╣рд▓реЗ рдирд┐рд░рд╕реНрдд рд╣реЛ рдЬрд╛рддреЗред
рдЗрд╕рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдЗрд╕реЗ HEAD рдХреЗ рд╕рд╛рде рдкреБрди: рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ - рдпрд╣ рдЕрднреА рднреА рд╣реЛрддрд╛ рд╣реИред рдЕрдЧрд▓рд╛, %s:/goto build_bpf_free_blks/abort()
рдФрд░ рджреЛрд╣рд░рд╛рдПрдВред рдХрд╛рд░рдг рдерд╛:
рд╢реБрдХреНрд░ рд╣реИ рдХрд┐ рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдЫреЛрдЯрд╛ рдерд╛, рдФрд░ рдЗрд╕рдореЗрдВ рдХреЗрд╡рд▓ рдХреБрдЫ рд╣реА рд╡рд┐рдлрд▓рддрд╛ рдмрд┐рдВрджреБ рдереЗред рдмрд╛рдж рдореЗрдВ 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
рддреЛ рдпрд╣ рд╣реИ 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 рджреНрд╡рд╛рд░рд╛ рдареАрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдЕрднреА рдирд╣реАрдВ, рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗред рдкреИрдЪ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рдж
seccomp_export_pfc
, рдпрд╣ рдЪреБрдк рд╣реЛ рдЧрдпрд╛ рд╣реИред рдХрд▓ рдореИрдВрдиреЗ рдЙрд╕ рдкреИрдЪ рдХреЛ рд╣рдорд╛рд░реЗ рд╕рднреА VMs (рдХреЗрд╡рд▓ рдПрдХ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдмрдЬрд╛рдп) рдкрд░ рдзрдХреЗрд▓ рджрд┐рдпрд╛, рдЬрдм рдпрд╣ рдЕрдВрддрддрдГ рд╣реЛрддрд╛ рд╣реИ рддреЛ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдкрдХрдбрд╝рдиреЗ рдХреА рдЙрдореНрдореАрдж рдореЗрдВредрдореБрдЭреЗ рдЪреБрдкреНрдкреА рдЕрдЬреАрдм рд▓рдЧрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЕрднреА рдХреЗ рд▓рд┐рдП рдореИрдВ рдЗрд╕реЗ рд╕рдВрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рд╕рднреА рдбрд┐рдмрдЧрд┐рдВрдЧ/рдирд┐рд░реНрдпрд╛рдд рддрд░реНрдХ _after_ рд╡рд┐рдлрд▓
seccomp_load
, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рд╡рд┐рдлрд▓рддрд╛ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред