แž€แžถแžšแž‡แžฝแžŸแž‡แžปแž›แž€แž“แŸ’แž‘แžฝแž›แž”แžŽแŸ’แžแžถแž›แžฑแŸ’แž™แž˜แžถแž“แž€แžถแžšแž‡แžฝแžŸแž‡แžปแž›แž˜แžทแž“แž–แŸแž‰แž›แŸแž‰แžŸแž˜แŸ’แžšแžถแž”แŸ‹แž—แžถแž–แž„แžถแž™แžšแž„แž‚แŸ’แžšแŸ„แŸ‡ Spectre แž“แŸ…แž€แŸ’แž“แžปแž„แžแžบแžŽแŸ‚แž›แž›แžธแž“แžปแž…

แžขแŸ’แž“แž€แžขแž—แžทแžœแžŒแŸ’แžแž“แŸแž‚แž˜แŸ’แžšแŸ„แž„ Grsecurity แž…แŸ‚แž€แžšแŸ†แž›แŸ‚แž€ แžšแžฟแž„แž“แžทแž‘แžถแž“แž”แŸ’แžšแžปแž„แž”แŸ’แžšแž™แŸแžแŸ’แž“แžŠแŸ‚แž›แž”แž„แŸ’แž แžถแž‰แž–แžธแžšแž”แŸ€แž”แžŠแŸ‚แž›แž€แžถแžšแž›แžปแž”แž…แŸ„แž›แž€แžถแžšแž–แŸ’แžšแž˜แžถแž“แž–แžธแžขแŸ’แž“แž€แž…แž„แž€แŸ’แžšแž„แžŠแŸ„แž™แž’แŸ’แžœแŸแžŸแž”แŸ’แžšแž แŸ‚แžŸแžขแžถแž…แž“แžถแŸ†แž‘แŸ…แžšแž€แž—แžถแž–แž„แžถแž™แžšแž„แž‚แŸ’แžšแŸ„แŸ‡แž“แŸ…แž€แŸ’แž“แžปแž„แž€แžผแžŠแŸ” แž“แŸ…แž…แžปแž„แžแŸ‚แžงแžŸแž—แžถ แžŸแž˜แŸ’แžšแžถแž”แŸ‹แžแžบแžŽแŸ‚แž›แž›แžธแž“แžปแž… แž€แžถแžšแž‡แžฝแžŸแž‡แžปแž›แž˜แžฝแž™แžแŸ’แžšแžผแžœแž”แžถแž“แžŸแŸ’แž“แžพแžกแžพแž„แžŸแž˜แŸ’แžšแžถแž”แŸ‹แžœแŸ‰แžทแž…แž‘แŸแžšแžแŸ’แž˜แžธแž“แŸƒแž€แžถแžšแž€แŸแž„แž”แŸ’แžšแžœแŸแž‰แŸ’แž…แž“แŸƒแž—แžถแž–แž„แžถแž™แžšแž„แž‚แŸ’แžšแŸ„แŸ‡ Spectre แžแžถแž˜แžšแž™แŸˆแž€แžถแžšแž แŸ…แžแžถแž˜แž”แŸ’แžšแž–แŸแž“แŸ’แž’ ptrace แŸ”

แž“แŸ…แž€แŸ’แž“แžปแž„แžŠแŸ†แžŽแžพแžšแž€แžถแžšแž“แŸƒแž€แžถแžšแžŸแžถแž€แž›แŸ’แž”แž„แž”แŸ†แžŽแŸ‡ แžขแŸ’แž“แž€แžขแž—แžทแžœแžŒแŸ’แžแž“แŸแž”แžถแž“แž€แžแŸ‹แžŸแž˜แŸ’แž‚แžถแž›แŸ‹แžแžถแž“แŸ…แž–แŸแž›แžŸแžถแž„แžŸแž„แŸ‹ แžขแŸ’แž“แž€แž…แž„แž€แŸ’แžšแž„แž”แž„แŸ’แž แžถแž‰แž€แžถแžšแž–แŸ’แžšแž˜แžถแž“แžขแŸ†แž–แžธแž€แžถแžšแž›แžถแž™แž€แžผแžŠ แž“แžทแž„แž“แžทแž™แž˜แž“แŸแž™ (แžšแž…แž“แžถแžŸแž˜แŸ’แž–แŸแž“แŸ’แž’แžแŸ’แžšแžผแžœแž”แžถแž“แž€แŸ†แžŽแžแŸ‹แž”แž“แŸ’แž‘แžถแž”แŸ‹แž–แžธแž€แžผแžŠแžŠแŸ„แž™แž•แŸ’แžแž›แŸ‹แžแž˜แŸ’แž›แŸƒแž‘แŸ…แžขแžแŸแžšแžŠแŸ‚แž›แž˜แžถแž“แžŸแŸ’แžšแžถแž”แŸ‹)แŸ–

int index = n;
แž”แŸ’แžšแžŸแžทแž“แž”แžพ (n < HBP_NUM) { index = array_index_nospec(index, HBP_NUM); struct perf_event *bp = thread->ptrace_bps[index];

Linus แž”แžถแž“แž‘แž‘แžฝแž›แž™แž€ แž€แžถแžšแž€แŸ‚แžแž˜แŸ’แžšแžผแžœ แž‘แŸ…แžŸแžถแžแžถแž˜แŸแžšแž”แžŸแŸ‹แžขแŸ’แž“แž€ แž€แž˜แŸ’แž…แžถแžแŸ‹ แž–แžธแž€แžถแžšแž–แŸ’แžšแž˜แžถแž“แžŠแŸ„แž™แžšแžปแŸ†แž“แžทแž™แž˜แž“แŸแž™แžขแžแŸแžšแž€แŸ’แž“แžปแž„ if blockแŸ–

แž”แŸ’แžšแžŸแžทแž“แž”แžพ (n < HBP_NUM) { int index = array_index_nospec(n, HBP_NUM); struct perf_event *bp = thread->ptrace_bps[index];

แž“แŸ…แž€แŸ’แž“แžปแž„แžแŸ‚แž€แž€แŸ’แž€แžŠแžถ แž€แžถแžšแž‡แžฝแžŸแž‡แžปแž›แž€แŸแžแŸ’แžšแžผแžœแž”แžถแž“แž”แž‰แŸ’แž‡แžผแž“แž‘แŸ…แž€แžถแž“แŸ‹ 4.4, 4.9, 4.14, 4.19, แž“แžทแž„ 5.2 แžŸแžถแžแžถแžแžบแžŽแŸ‚แž›แžŸแŸ’แžแžทแžšแž—แžถแž–แŸ” แžขแŸ’แž“แž€แžแŸ‚แž‘แžถแŸ†แžŸแŸ’แžแŸแžšแž—แžถแž–แž€แŸแž”แžถแž“แž‡แžฝแž”แž”แŸ’แžšแž‘แŸ‡แž€แžถแžšแž–แŸ’แžšแž˜แžถแž“แž“แŸแŸ‡แž•แž„แžŠแŸ‚แžš แž แžพแž™แž‡แŸ†แž“แžฝแžŸแžฑแŸ’แž™แž€แžถแžšแžแŸ’แžšแžฝแžแž–แžทแž“แžทแžแŸ’แž™แžŠแžพแž˜แŸ’แž”แžธแž˜แžพแž›แžแžถแžแžพแžœแžถแžแŸ’แžšแžผแžœแž”แžถแž“แž‡แžฝแžŸแž‡แžปแž›แžšแžฝแž…แž แžพแž™แž“แŸ…แž€แŸ’แž“แžปแž„แžŸแžถแžแžถแž˜แŸแžšแž”แžŸแŸ‹ Linus แžŠแŸ‚แžšแžฌแž‘แŸ แž–แžฝแž€แž‚แŸแž”แžถแž“แž‡แžฝแžŸแž‡แžปแž›แžœแžถแžŠแŸ„แž™แžแŸ’แž›แžฝแž“แžฏแž„แŸ” แž”แž‰แŸ’แž แžถแž‚แžบแžแžถแž–แžฝแž€แž‚แŸแž˜แžทแž“แž”แžถแž“แž‚แžทแžแž…แŸ’แžšแžพแž“แž‘แŸแŸ” แž•แŸ’แž›แžถแžŸแŸ‹แž‘แžธ แž€แžถแžšแž€แŸ†แžŽแžแŸ‹แžšแž…แž“แžถแžŸแž˜แŸ’แž–แŸแž“แŸ’แž’แžกแžพแž„ แžŠแžผแž…แŸ’แž“แŸแŸ‡แž€แžถแžšแž แŸ…แž‘แŸ…แž€แžถแž“แŸ‹ array_index_nospec แžŠแŸ‚แž›แž•แŸ’แžแž›แŸ‹แž€แžถแžšแž€แžถแžšแž–แžถแžšแžŠแŸ„แž™แž•แŸ’แž‘แžถแž›แŸ‹แž”แŸ’แžšแž†แžถแŸ†แž„แž“แžนแž„แž—แžถแž–แž„แžถแž™แžšแž„แž‚แŸ’แžšแŸ„แŸ‡ แž›แŸ‚แž„แž”แŸ’แžšแžพแž€แŸ’แž“แžปแž„แž“แžทแž™แž˜แž“แŸแž™แž“แŸƒแžšแž…แž“แžถแžŸแž˜แŸ’แž–แŸแž“แŸ’แž’ แž แžพแž™แž‡แŸ†แž“แžฝแžŸแžฑแŸ’แž™แžขแžแŸแžš "แž›แžทแž”แžทแž€แŸ’แžšแž˜" แžขแžแŸแžš "n" แžแŸ‚แž„แžแŸ‚แžแŸ’แžšแžผแžœแž”แžถแž“แž”แŸ’แžšแžพแž”แŸ’แžšแžถแžŸแŸ‹แŸ–

int index = n;
แž”แŸ’แžšแžŸแžทแž“แž”แžพ (n < HBP_NUM ){ struct perf_event *bp = thread->ptrace_bps[index];
index = array_index_nospec(index, HBP_NUM);

แž”แŸ’แžšแž—แž–: opennet.ru

แž”แž“แŸ’แžแŸ‚แž˜แž˜แžแžทแž™แŸ„แž”แž›แŸ‹