рд▓рд┐рдирдХреНрд╕ рдХрд░реНрдиреЗрд▓рдорд╛ рд╕реНрдкреЗрдХреНрдЯрд░ рднреЗрджреНрдпрддрд╛рдХреЛ рд▓рд╛рдЧрд┐ рдЕрдкреВрд░реНрдг рд╕рдорд╛рдзрд╛рдирдХреЛ рдкрд░рд┐рдгрд╛рдордорд╛ рдПрдХ рдЦрд░рд╛рдм-рд╡рд┐рдЪрд╛рд░ рдЧрд░рд┐рдПрдХреЛ рдкреНрдпрд╛рдЪ

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

рдкреНрдпрд╛рдЪ рдкрд░реАрдХреНрд╖рдг рдЧрд░реНрджрд╛, рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛рд╣рд░реВрд▓реЗ рдпрд╛рдж рдЧрд░реЗ рдХрд┐ рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрджрд╛, рдХрдореНрдкрд╛рдЗрд▓рд░рд▓реЗ рдХреЛрдб рд░ рдкрд░рд┐рднрд╛рд╖рд╛рд╣рд░реВ рдорд┐рд╢реНрд░рдг рдЧрд░реНрдиреЗ рдмрд╛рд░реЗ рдЪреЗрддрд╛рд╡рдиреА рджреЗрдЦрд╛рдЙрдБрджрдЫ (рд╕рдВрд░рдЪрдирд╛ рдХреЛрдб рдкрдЫрд┐ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЧрд░рд┐рдПрдХреЛ рдерд┐рдпреЛ, рдЕрд╡рд╕реНрдерд┐рдд рдЪрд░рд▓рд╛рдИ рдорд╛рди рддреЛрдХреНрджреИ):

int index = n;
рдпрджрд┐ (n < HBP_NUM) { рд╕реВрдЪрдХрд╛рдВрдХ = array_index_nospec(рд╕реВрдЪрдХрд╛рдВрдХ, HBP_NUM); рд╕рдВрд░рдЪрдирд╛ perf_event *bp = рдереНрд░реЗрдб->ptrace_bps[рд╕реВрдЪрдХрд╛рдВрдХ];

рд▓рд┐рдирд╕рд▓реЗ рд╕реНрд╡реАрдХрд╛рд░ рдЧрд░реНрдиреБрднрдпреЛ рд╕реБрдзрд╛рд░ рддрдкрд╛рдИрдХреЛ рдорд╛рд╕реНрдЯрд░ рд╢рд╛рдЦрд╛рдорд╛, рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдПрдХреЛ рдЫ рдЪрд░ рдкрд░рд┐рднрд╛рд╖рд╛рд▓рд╛рдИ рдпрджрд┐ рдмреНрд▓рдХрдорд╛ рд╕рд╛рд░реНрджреИ рдЪреЗрддрд╛рд╡рдиреАрдмрд╛рдЯ:

рдпрджрд┐ (n < HBP_NUM) { int index = array_index_nospec(n, HBP_NUM); рд╕рдВрд░рдЪрдирд╛ perf_event *bp = рдереНрд░реЗрдб->ptrace_bps[рд╕реВрдЪрдХрд╛рдВрдХ];

рдЬреБрд▓рд╛рдИрдорд╛, рд╕реНрдерд┐рд░ рдХрд░реНрдиреЗрд▓ рд╢рд╛рдЦрд╛рд╣рд░реВ 4.4, 4.9, 4.14, 4.19 рд░ 5.2 рдорд╛ рдлрд┐рдХреНрд╕ рдкрдирд┐ рдкреЛрд░реНрдЯ рдЧрд░рд┐рдПрдХреЛ рдерд┐рдпреЛред рд╕реНрдерд┐рд░ рд╢рд╛рдЦрд╛рд╣рд░реВрдХреЛ рдорд░реНрдорддрдХрд░реНрддрд╛рд╣рд░реВрд▓реЗ рдкрдирд┐ рдЪреЗрддрд╛рд╡рдиреАрдХреЛ рд╕рд╛рдордирд╛ рдЧрд░реЗ рд░, рдпреЛ рд▓рд┐рдирд╕рдХреЛ рдорд╛рд╕реНрдЯрд░ рд╢рд╛рдЦрд╛рдорд╛ рдкрд╣рд┐рд▓реЗ рдиреИ рдлрд┐рдХреНрд╕ рдЧрд░рд┐рдПрдХреЛ рдЫ рдХрд┐ рдЫреИрди рднрдиреЗрд░ рдЬрд╛рдБрдЪ рдЧрд░реНрдиреБрдХреЛ рд╕рдЯреНрдЯрд╛, рддрд┐рдиреАрд╣рд░реВрд▓реЗ рдЖрдлреИрдВ рд╕рдорд╛рдзрд╛рди рдЧрд░реЗред рд╕рдорд╕реНрдпрд╛ рдпреЛ рд╣реЛ рдХрд┐ рд╡рд╛рд╕реНрддрд╡рдорд╛ рдпрд╕рдХреЛ рдмрд╛рд░реЗрдорд╛ рд╕реЛрдЪ рдирдЧрд░реА, рддрд┐рдиреАрд╣рд░реВ рдорд╛рддреНрд░ рд╕рд╛рд░рд┐рдпреЛ рд╕рдВрд░рдЪрдирд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЧрд░реНрджреИ, рддрд╛рдХрд┐ array_index_nospec рд▓рд╛рдИ рдХрд▓ рдЧрд░реНрдиреБрд╣реЛрд╕реН, рдЬрд╕рд▓реЗ рдкреНрд░рддреНрдпрдХреНрд╖ рд░реВрдкрдорд╛ рднреЗрджреНрдпрддрд╛ рд╡рд┐рд░реБрджреНрдз рд╕реБрд░рдХреНрд╖рд╛ рдкреНрд░рджрд╛рди рдЧрд░реНрджрдЫ, рд╕рдВрд░рдЪрдирд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЧрд░реНрджрд╛ рдЕрдм рдкреНрд░рдпреЛрдЧ рд╣реБрдБрджреИрди, рд░ рдЪрд░ "index" рдХреЛ рд╕рдЯреНрдЯрд╛ рдЪрд░ "n" рд╕рдзреИрдВ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫ:

int index = n;
рдпрджрд┐ (n <HBP_NUM){ struct perf_event *bp = рдереНрд░реЗрдб->ptrace_bps[рд╕реВрдЪрдХрд╛рдВрдХ];
index = array_index_nospec(рд╕реВрдЪрдХрд╛рдВрдХ, HBP_NUM);

рд╕реНрд░реЛрдд: opennet.ru

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди