Linux kernel 5.18 เบงเบฒเบ‡เปเบœเบ™เบ—เบตเปˆเบˆเบฐเบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เปƒเบŠเป‰เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™เบžเบฒเบชเบฒ C C11

เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเบชเบปเบ™เบ—เบฐเบ™เบฒเบŠเบธเบ”เบ‚เบญเบ‡ patches เป€เบžเบทเปˆเบญเปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒ Spectre เปƒเบ™เบฅเบฐเบซเบฑเบ”เบฅเบฒเบเบŠเบทเปˆเบ—เบตเปˆเป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡, เบกเบฑเบ™เป„เบ”เป‰เบเบฒเบเป€เบ›เบฑเบ™เบ—เบตเปˆเบŠเบฑเบ”เป€เบˆเบ™เบงเปˆเบฒเบšเบฑเบ™เบซเบฒเบชเบฒเบกเบฒเบ”เปเบเป‰เป„เบ‚เป„เบ”เป‰เบขเปˆเบฒเบ‡เบชเบฐเบซเบ‡เปˆเบฒเบ‡เบฒเบกเบ–เป‰เบฒเบฅเบฐเบซเบฑเบ” C เบ—เบตเปˆเบชเบญเบ”เบ„เปˆเบญเบ‡เบเบฑเบšเบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™เบฎเบธเปˆเบ™เปƒเบซเบกเปˆเป„เบ”เป‰เบ–เบทเบเบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™ kernel. เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™, เบฅเบฐเบซเบฑเบ” kernel เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบ•เป‰เบญเบ‡เบ›เบฐเบ•เบดเบšเบฑเบ”เบ•เบฒเบกเบ‚เปเป‰เบเปเบฒเบ™เบปเบ”เบ‚เบญเบ‡ ANSI C (C89), เบชเป‰เบฒเบ‡เบ•เบฑเป‰เบ‡เบ‚เบถเป‰เบ™เปƒเบ™เบ›เบต 1989.

เบšเบฑเบ™เบซเบฒเบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบš Spectre เปƒเบ™เบฅเบฐเบซเบฑเบ”เปเบกเปˆเบ™เป€เบเบตเบ”เบกเบฒเบˆเบฒเบเบเบฒเบ™เบชเบทเบšเบ•เปเปˆเปƒเบŠเป‰ iterator เบ—เบตเปˆเบเปเบฒเบ™เบปเบ”เปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบเบซเบผเบฑเบ‡เบˆเบฒเบ loop - macro เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญ iterate เบซเบผเบฒเบเบเบงเปˆเบฒเบญเบปเบ‡เบ›เบฐเบเบญเบšเบ‚เบญเบ‡เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ—เบตเปˆเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ, เปเบฅเบฐเป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒ loop iterator เบ–เบทเบเบชเบปเปˆเบ‡เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™ macro เบ™เบฑเป‰เบ™, เบกเบฑเบ™เปเบกเปˆเบ™. เบเปเบฒเบ™เบปเบ”เบขเบนเปˆเบ™เบญเบ loop เบ•เบปเบงเบ‚เบญเบ‡เบกเบฑเบ™เป€เบญเบ‡เปเบฅเบฐเบเบฑเบ‡เบกเบตเบขเบนเปˆเบซเบผเบฑเบ‡เบˆเบฒเบ loop. เบเบฒเบ™เปƒเบŠเป‰เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™ C99 เบˆเบฐเบŠเปˆเบงเบเปƒเบซเป‰เบ•เบปเบงเปเบ› loop เบ–เบทเบเบเปเบฒเบ™เบปเบ”เบขเบนเปˆเปƒเบ™ for() block, เป€เบŠเบดเปˆเบ‡เบˆเบฐเปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒเป„เบ”เป‰เป‚เบ”เบเบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบกเบตเบเบฒเบ™เปเบเป‰เป„เบ‚.

Linus Torvalds เบ•เบปเบเบฅเบปเบ‡เป€เบซเบฑเบ™เบ”เบตเบเบฑเบšเปเบ™เบงเบ„เบงเบฒเบกเบ„เบดเบ”เบ‚เบญเบ‡เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบชเปเบฒเบฅเบฑเบšเบ‚เปเป‰เบเปเบฒเบ™เบปเบ”เปƒเบซเบกเปˆเปเบฅเบฐเบชเบฐเป€เบซเบ™เบตเบเป‰เบฒเบ 5.18 kernel เป€เบžเบทเปˆเบญเบ™เปเบฒเปƒเบŠเป‰เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™ C11, เบˆเบฑเบ”เบžเบตเบกเบกเบฒเปƒเบ™เบ›เบต 2011. เปƒเบ™โ€‹เบฅเบฐโ€‹เบซเบงเปˆเบฒเบ‡โ€‹เบเบฒเบ™โ€‹เบ—เบปเบ”โ€‹เบชเบญเบšโ€‹เป€เบšเบทเป‰เบญเบ‡โ€‹เบ•เบปเป‰เบ™โ€‹, เบเบฒเบ™โ€‹เบ›เบฐโ€‹เบเบญเบšโ€‹เปƒเบ™ GCC เปเบฅเบฐ Clang เปƒเบ™โ€‹เบฎเบนเบšโ€‹เปเบšเบšโ€‹เปƒเบซเบกเปˆโ€‹เป„เบ”เป‰โ€‹เบœเปˆเบฒเบ™โ€‹เป„เบ›โ€‹เป‚เบ”เบโ€‹เบšเปเปˆโ€‹เบกเบตโ€‹เบเบฒเบ™ deviationsโ€‹. เบ–เป‰เบฒเบšเปเปˆเบกเบตเบšเบฑเบ™เบซเบฒเบ—เบตเปˆเบšเปเปˆเบ„เบฒเบ”เบ„เบดเบ”เป€เบเบตเบ”เบ‚เบทเป‰เบ™เปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบขเปˆเบฒเบ‡เบฅเบฐเบญเบฝเบ”, เบ—เบฒเบ‡เป€เบฅเบทเบญเบ '--std=gnu5.18' เปƒเบ™ 89 kernel build scripts เบˆเบฐเบ–เบทเบเปเบ—เบ™เบ—เบตเปˆเบ”เป‰เบงเบ '--std=gnu11 -Wno-shift-negative-value'. เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบ‚เบญเบ‡เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™ C17 เบเบฑเบ‡เป„เบ”เป‰เบ–เบทเบเบžเบดเบˆเบฒเบฅเบฐเบ™เบฒ, เปเบ•เปˆเปƒเบ™เบเปเบฅเบฐเบ™เบตเบ™เบตเป‰เบกเบฑเบ™เบˆเบฐเบกเบตเบ„เบงเบฒเบกเบˆเปเบฒเป€เบ›เบฑเบ™เบ—เบตเปˆเบˆเบฐเป€เบžเบตเปˆเบกเบชเบฐเบšเบฑเบšเบ—เบตเปˆเบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบ‚เบฑเป‰เบ™เบ•เปˆเปเบฒเบ‚เบญเบ‡ GCC. เบเบฒเบ™เบฅเบงเบกเป€เบญเบปเบฒเบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™ C11 เป€เบซเบกเบฒเบฐเบเบฑเบšเบ„เบงเบฒเบกเบ•เป‰เบญเบ‡เบเบฒเบ™เปƒเบ™เบ›เบฐเบˆเบธเบšเบฑเบ™เบชเปเบฒเบฅเบฑเบšเบฎเบธเปˆเบ™ GCC (5.1).

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: opennet.ru

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™