เชซเซ‹เชฒเซเชฒเซ€เช“เชจเชพ เชธเซเชงเชพเชฐเชพเชจเซ‡ เชชเชฐเชฟเชฃเชพเชฎเซ‡ Linux เช•เชฐเซเชจเชฒเชฎเชพเช‚ เชธเซเชชเซ‡เช•เซเชŸเชฐ เชจเชฌเชณเชพเชˆ เชฎเชพเชŸเซ‡ เช…เชชเซ‚เชฐเซเชฃ เชธเซเชงเชพเชฐเซ‹ เชฅเชฏเซ‹

Grsecurity เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชจเชพ เชตเชฟเช•เชพเชธเช•เชฐเซเชคเชพเช“ เชตเชนเซ‡เช‚เชšเชพเชฏเซ‡เชฒ เชเช• เชธเชพเชตเชšเซ‡เชคเซ€เชญเชฐเซ€ เชตเชพเชฐเซเชคเชพ เชœเซ‡ เชฆเชฐเซเชถเชพเชตเซ‡ เช›เซ‡ เช•เซ‡ เช•เชฎเซเชชเชพเชˆเชฒเชฐ เชšเซ‡เชคเชตเชฃเซ€เช“เชจเซ‡ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชฌเซ‡เชฆเชฐเช•เชพเชฐ เชฆเซ‚เชฐ เช•เชฐเชตเชพเชฅเซ€ เช•เซ‹เชกเชฎเชพเช‚ เชจเชฌเชณเชพเชˆเช“ เชฅเชˆ เชถเช•เซ‡ เช›เซ‡. เชฎเซ‡เชจเชพ เช…เช‚เชคเชฎเชพเช‚, Linux เช•เชฐเซเชจเชฒ เชฎเชพเชŸเซ‡, ptrace เชธเชฟเชธเซเชŸเชฎ เช•เซ‹เชฒ เชฆเซเชตเชพเชฐเชพ เชธเซเชชเซ‡เช•เซเชŸเชฐ เชจเชฌเชณเชพเชˆเชจเชพ เชถเซ‹เชทเชฃเชจเชพ เชจเชตเชพ เชตเซ‡เช•เซเชŸเชฐ เชฎเชพเชŸเซ‡ เชซเชฟเช•เซเชธเชจเซ€ เชฆเชฐเช–เชพเชธเซเชค เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ€ เชนเชคเซ€.

เชชเซ‡เชšเชจเชพ เชชเชฐเซ€เช•เซเชทเชฃเชจเซ€ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเชฎเชพเช‚, เชตเชฟเช•เชพเชธเช•เชฐเซเชคเชพเช“เช เชจเซ‹เช‚เชงเซเชฏเซเช‚ เช•เซ‡ เชœเซเชฏเชพเชฐเซ‡ เชจเชฟเชฐเซเชฎเชพเชฃ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡, เชคเซเชฏเชพเชฐเซ‡ เช•เชฎเซเชชเชพเช‡เชฒเชฐ เชฎเชฟเชถเซเชฐเชฃ เช•เซ‹เชก เช…เชจเซ‡ เชตเซเชฏเชพเช–เซเชฏเชพเช“ เชตเชฟเชถเซ‡ เชšเซ‡เชคเชตเชฃเซ€ เชชเซเชฐเชฆเชฐเซเชถเชฟเชค เช•เชฐเซ‡ เช›เซ‡ (เชธเช‚เชฐเชšเชจเชพ เชตเชฐเซเชคเชฎเชพเชจ เชšเชฒเชจเซ‡ เชฎเซ‚เชฒเซเชฏ เช…เชธเชพเช‡เชจ เช•เชฐเซ€เชจเซ‡ เช•เซ‹เชก เชชเช›เซ€ เชตเซเชฏเชพเช–เซเชฏเชพเชฏเชฟเชค เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ€ เชนเชคเซ€):

int index = n;
เชœเซ‹ (n < HBP_NUM) { เช…เชจเซเช•เซเชฐเชฎเชฃเชฟเช•เชพ = array_index_nospec(index, HBP_NUM); struct perf_event *bp = เชฅเซเชฐเซ‡เชก->ptrace_bps[เช‡เชจเซเชกเซ‡เช•เซเชธ];

เชฒเชฟเชจเชธ เชธเซเชตเซ€เช•เชพเชฐเซเชฏเซเช‚ เช•เชฐเซ‡เช•เซเชถเชจ เชคเชฎเชพเชฐเซ€ เชฎเซเช–เซเชฏ เชถเชพเช–เชพเชฎเชพเช‚, เช›เซเชŸเช•เชพเชฐเซ‹ เชฎเซ‡เชณเชตเชตเซ‹ เชšเชฒ เชตเซเชฏเชพเช–เซเชฏเชพเชจเซ‡ if เชฌเซเชฒเซ‹เช•เชฎเชพเช‚ เชฒเชชเซ‡เชŸเซ€เชจเซ‡ เชšเซ‡เชคเชตเชฃเซ€เชฎเชพเช‚เชฅเซ€:

เชœเซ‹ (n < HBP_NUM) { int index = array_index_nospec(n, HBP_NUM); struct perf_event *bp = เชฅเซเชฐเซ‡เชก->ptrace_bps[เช‡เชจเซเชกเซ‡เช•เซเชธ];

เชœเซเชฒเชพเชˆเชฎเชพเช‚, เชซเชฟเช•เซเชธเชจเซ‡ 4.4, 4.9, 4.14, 4.19 เช…เชจเซ‡ 5.2 เชธเซเชฅเชฟเชฐ เช•เชฐเซเชจเชฒ เชถเชพเช–เชพเช“เชฎเชพเช‚ เชชเชฃ เชชเซ‹เชฐเซเชŸ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ€ เชนเชคเซ€. เชธเซเชฅเชฟเชฐ เชœเชพเชณเชตเชฃเซ€ เช•เชฐเชจเชพเชฐเชพเช“เช เชชเชฃ เชšเซ‡เชคเชตเชฃเซ€เชจเซ‹ เชธเชพเชฎเชจเซ‹ เช•เชฐเชตเซ‹ เชชเชกเซเชฏเซ‹, เช…เชจเซ‡ เชคเซ‡ เชฒเชฟเชจเชธเชจเซ€ เชฎเซเช–เซเชฏ เชถเชพเช–เชพเชฎเชพเช‚ เชชเชนเซ‡เชฒเซ‡เชฅเซ€ เชœ เชจเชฟเชถเซเชšเชฟเชค เช›เซ‡ เช•เซ‡ เช•เซ‡เชฎ เชคเซ‡ เชคเชชเชพเชธเชตเชพเชจเซ‡ เชฌเชฆเชฒเซ‡, เชคเซ‡เช“เช เชคเซ‡เชจเซ‡ เชœเชพเชคเซ‡ เชชเซ‡เชš เช•เชฐเซ€. เชธเชฎเชธเซเชฏเชพ เช เช›เซ‡ เช•เซ‡ เชคเซ‡เช“, เชตเชงเซ เชตเชฟเชšเชพเชฐ เช•เชฐเซเชฏเชพ เชตเชฟเชจเชพ, เชฎเชพเชคเซเชฐ เช–เชธเซ‡เชกเชตเชพเชฎเชพเช‚ เชธเซเชŸเซเชฐเช•เซเชšเชฐ เชกเซ‡เชซเชฟเชจเซ‡เชถเชจ เช…เชช เช•เชฐเซ‹, เชœเซ‡เชฅเซ€ array_index_nospec เชชเชฐ เช•เซ‰เชฒ เช•เชฐเซ‹, เชœเซ‡ เชธเซ€เชงเซ€ เชฐเซ€เชคเซ‡ เชจเชฌเชณเชพเชˆ เชธเชพเชฎเซ‡ เชฐเช•เซเชทเชฃ เชชเซ‚เชฐเซเช‚ เชชเชพเชกเซ‡ เช›เซ‡, เชคเซ‡เชจเซ‹ เช‰เชชเชฏเซ‹เช— เชนเชตเซ‡ เชธเซเชŸเซเชฐเช•เซเชšเชฐเชจเซ€ เชตเซเชฏเชพเช–เซเชฏเชพเชฎเชพเช‚ เชฅเชคเซ‹ เชจเชฅเซ€, เช…เชจเซ‡ "เช‡เชจเซเชกเซ‡เช•เซเชธ" เชตเซ‡เชฐเซ€เชเชฌเชฒเชจเซ‡ เชฌเชฆเชฒเซ‡, "n" เชšเชฒเชจเซ‹ เชนเช‚เชฎเซ‡เชถเชพ เช‰เชชเชฏเซ‹เช— เชฅเชคเซ‹ เชนเชคเซ‹:

int index = n;
เชœเซ‹ (n < HBP_NUM ){ เชฐเชšเชจเชพ perf_event *bp = เชฅเซเชฐเซ‡เชก->ptrace_bps[เช‡เชจเซเชกเซ‡เช•เซเชธ];
index = array_index_nospec(index, HBP_NUM);

เชธเซ‹เชฐเซเชธ: opennet.ru

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹