āĻāĻ•āĻŸāĻŋ āĻĢā§āĻ¸āĻ•ā§āĻĄāĻŧāĻŋ āĻĢāĻŋāĻ•ā§āĻ¸ā§‡āĻ° āĻĢāĻ˛ā§‡ āĻ˛āĻŋāĻ¨āĻžāĻ•ā§āĻ¸ āĻ•āĻžāĻ°ā§āĻ¨ā§‡āĻ˛ā§‡ āĻāĻ•āĻŸāĻŋ āĻ¸ā§āĻĒā§‡āĻ•āĻŸāĻžāĻ° āĻĻā§āĻ°ā§āĻŦāĻ˛āĻ¤āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻ…āĻ¸āĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ āĻšāĻ¯āĻŧā§‡āĻ›ā§‡

āĻ—ā§āĻ°āĻ¸āĻŋāĻ•āĻŋāĻ‰āĻ°āĻŋāĻŸāĻŋ āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒā§‡āĻ° āĻŦāĻŋāĻ•āĻžāĻļāĻ•āĻžāĻ°ā§€āĻ°āĻž āĻ­āĻžāĻ— āĻ•āĻ°āĻž āĻ•āĻŽā§āĻĒāĻžāĻ‡āĻ˛āĻžāĻ° āĻ¸āĻ¤āĻ°ā§āĻ•āĻ¤āĻž āĻ•āĻŋāĻ­āĻžāĻŦā§‡ āĻšāĻŋāĻ¨ā§āĻ¤āĻžāĻšā§€āĻ¨āĻ­āĻžāĻŦā§‡ āĻ¨āĻŋāĻ°ā§āĻŽā§‚āĻ˛ āĻ•āĻ°āĻž āĻ•ā§‹āĻĄā§‡ āĻĻā§āĻ°ā§āĻŦāĻ˛āĻ¤āĻžāĻ° āĻĻāĻŋāĻ•ā§‡ āĻ¨āĻŋāĻ¯āĻŧā§‡ āĻ¯ā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡ āĻ¤āĻž āĻĒā§āĻ°āĻĻāĻ°ā§āĻļāĻ¨ āĻ•āĻ°ā§‡ āĻāĻ•āĻŸāĻŋ āĻ¸āĻ¤āĻ°ā§āĻ•āĻ¤āĻžāĻŽā§‚āĻ˛āĻ• āĻ—āĻ˛ā§āĻĒāĨ¤ āĻŽā§‡ āĻŽāĻžāĻ¸ā§‡āĻ° āĻļā§‡āĻˇā§‡, ptrace āĻ¸āĻŋāĻ¸ā§āĻŸā§‡āĻŽ āĻ•āĻ˛ā§‡āĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ āĻ¸ā§āĻĒā§‡āĻ•āĻŸāĻžāĻ° āĻĻā§āĻ°ā§āĻŦāĻ˛āĻ¤āĻžāĻ° āĻļā§‹āĻˇāĻŖā§‡āĻ° āĻāĻ•āĻŸāĻŋ āĻ¨āĻ¤ā§āĻ¨ āĻ­ā§‡āĻ•ā§āĻŸāĻ°ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ˛āĻŋāĻ¨āĻžāĻ•ā§āĻ¸ āĻ•āĻžāĻ°ā§āĻ¨ā§‡āĻ˛ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻ¸āĻ‚āĻļā§‹āĻ§āĻ¨ā§‡āĻ° āĻĒā§āĻ°āĻ¸ā§āĻ¤āĻžāĻŦ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›āĻŋāĻ˛āĨ¤

āĻĒā§āĻ¯āĻžāĻšāĻŸāĻŋ āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻ•āĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ, āĻŦāĻŋāĻ•āĻžāĻļāĻ•āĻžāĻ°ā§€āĻ°āĻž āĻ˛āĻ•ā§āĻˇā§āĻ¯ āĻ•āĻ°ā§‡āĻ›ā§‡āĻ¨ āĻ¯ā§‡ āĻ¨āĻŋāĻ°ā§āĻŽāĻžāĻŖā§‡āĻ° āĻ¸āĻŽāĻ¯āĻŧ, āĻ•āĻŽā§āĻĒāĻžāĻ‡āĻ˛āĻžāĻ° āĻ•ā§‹āĻĄ āĻāĻŦāĻ‚ āĻ¸āĻ‚āĻœā§āĻžāĻžāĻ° āĻŽāĻŋāĻļā§āĻ°āĻŖ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻāĻ•āĻŸāĻŋ āĻ¸āĻ¤āĻ°ā§āĻ•āĻ¤āĻž āĻĒā§āĻ°āĻĻāĻ°ā§āĻļāĻ¨ āĻ•āĻ°ā§‡ (āĻ•ā§‹āĻĄā§‡āĻ° āĻĒāĻ°ā§‡ āĻ•āĻžāĻ āĻžāĻŽā§‹āĻŸāĻŋ āĻ¸āĻ‚āĻœā§āĻžāĻžāĻ¯āĻŧāĻŋāĻ¤ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›āĻŋāĻ˛, āĻāĻ•āĻŸāĻŋ āĻŦāĻŋāĻĻā§āĻ¯āĻŽāĻžāĻ¨ āĻ­ā§‡āĻ°āĻŋāĻ¯āĻŧā§‡āĻŦāĻ˛ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻŽāĻžāĻ¨ āĻ¨āĻŋāĻ°ā§āĻ§āĻžāĻ°āĻŖ āĻ•āĻ°ā§‡):

int index = n;
āĻ¯āĻĻāĻŋ (n < HBP_NUM) { index = 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 ){ struct perf_event *bp = āĻĨā§āĻ°ā§‡āĻĄ->ptrace_bps[āĻ¸ā§‚āĻšāĻ•];
index = array_index_nospec(index, HBP_NUM);

āĻ‰āĻ¤ā§āĻ¸: opennet.ru

āĻāĻ•āĻŸāĻŋ āĻŽāĻ¨ā§āĻ¤āĻŦā§āĻ¯ āĻœā§āĻĄāĻŧā§āĻ¨