Баги в про­цес­со­рах (Intel, AMD, ARM64, Power8, Power9). Непри­ят­ные.

Аватар пользователя v.p.

Если крат­ко - из юзер­лэнд под любой ОС на Intel и ARM64(?) можно по­лу­чить до­ступ к си­стем­ной па­мя­ти. Баг­фикс в про­цес­се, но он уби­ва­ет про­из­во­ди­тель­ность. PoC Интел:

 

Here's everything I've been able to find so far:

  • The issue impacts all modern Intel CPUs. (Edit: It's been confirmed that the latest unaffected CPU is the original Pentium.) According to an AMD engineer, "AMD processors are not subject to the types of attacks that the kernel page table isolation feature protects against. The AMD microarchitecture does not allow memory references, including speculative references, that access higher privileged data when running in a lesser privileged mode when that access would result in a page fault." In short, AMD does not have the bug.

  • If successfully exploited, it could allow any program running on your computer (including a webpage with JavaScript) to access memory used by the operating system, giving it total control over your computer.

  • There is a patch in the works for both Windows and Linux that protects against this. However, the patch can cause a large impact on performance. It slows down any "syscalls" - function calls where the program talks directly to the operating system. This includes everything from opening files to communicating over the network; it is almost impossible to write a modern program without them.

  • The performance impact seen depends on the amount of syscalls the application makes. Raw number-​crunching applications will see very little performance impact, whereas applications that have to talk to the OS a lot can see a large impact.

  • Raw numbers are hard to find due to the secretive nature of these patches, but here are some basic benchmark impacts we've seen so far:

    • Linux, on an i7 6700, calling the getpid syscall 100,000,000 times:

      • Before the patch: ~3.8 seconds.
      • After the patch: ~15 seconds.
    • PostgreSQL, a database application, i7-6820HQ, SELECT 1 benchmark:

      • Before the patch: 420490.162391 transactions per second
      • After the patch: 350746.065039 transactions per second

 

Итак, бла­го­да­ря бди­тель­но­му и неле­ни­во­му ка­мра­ду Нехо­ро­ший име­ет­ся рас­ши­рен­ное тол­ко­ва­ние и по­яс­не­ние:

 

Раз­ра­бот­чи­ки из Google Project Zero опуб­ли­ко­ва­ли де­та­ли уяз­ви­мо­стей, ко­то­рые за­тра­ги­ва­ют не толь­ко про­цес­со­ры Intel и ARM64, но и AMD тоже (есть со­об­ще­ния, что толь­ко при вклю­че­нии BPF JIT в ядре, что по умол­ча­нию вы­клю­че­но). На­зва­ния им дали: Meltdown и Spectre (рас­плав­ле­ние ядер­но­го ре­ак­то­ра и при­зрак).

Meltdown поз­во­ля­ет при­ло­же­нию чи­тать любую па­мять ком­пью­те­ра, вклю­чая па­мять ядра и дру­гих поль­зо­ва­те­лей. Этой атаке под­вер­же­ны про­цес­со­ры Intel (по непод­твер­жден­ным дан­ным все мо­де­ли с 1995 года, кроме Itanium и Atom) и ARM64.

Spectre со­зда­ёт брешь в изо­ля­ции раз­лич­ных при­ло­же­ний и поз­во­ля­ет ата­ку­ю­ще­му об­ман­ным спо­со­бом по­лу­чить дан­ные чу­жо­го при­ло­же­ния. Этой атаке под­вер­же­ны про­цес­со­ры Intel, AMD, ARM64, Power8 и 9.

Экс­пло­ит, экс­плу­а­ти­ру­ю­щий Meltdown поз­во­ля­ет чи­тать па­мять ядра со ско­ро­стью 2000 байт в се­кун­ду на про­цес­со­ре Intel Xeon ар­хи­тек­ту­ры Haswell.

Уяз­ви­мо­стям на­зна­че­ны сле­ду­ю­щие CVE: CVE-2017-5753, CVE-2017-5715 и CVE-2017-5754.

На­пом­ню, что поль­зо­ва­те­ли еже­днев­но за­пус­ка­ют чужой код на своих ком­пью­те­рах, по­се­щая веб сайты с JavaScript (>99%), по­это­му при­ме­не­ние патча (здесь и здесь) обя­за­тель­но, если вы до­ро­жи­те сво­и­ми дан­ны­ми. Есть PoC (п.4.3) , де­мон­стри­ру­ю­щий атаку с этой уяз­ви­мо­стью через JavaScript.

Раз­ра­бот­чи­ки ARM при­во­дят по­дроб­но­сти атаки для ARM, за­яв­ля­ют о том, что уяз­ви­мы лишь неко­то­рые про­цес­со­ры ARM, дают их спи­сок и меры по по­вы­ше­нию без­опас­но­сти

 

Ав­тор­ство: 
Копия чужих ма­те­ри­а­лов
Ком­мен­та­рий ав­то­ра: 

Пе­ре­во­дить всё не стал, ибо спе­цам и так по­нят­но о чём речь по ко­пи­па­сте с Реддит-​а. Для неспе­цов крат­кая вы­жим­ка в самом на­ча­ле. По­след­ствия очень пе­чаль­ные, даже смеш­ной явас­крипт в се­кун­ды сло­ма­ет всю ма­ши­ну к херам, кон­цеп­ции "вир­ту­аль­но­го пе­ри­мет­ра" осо­бен­но на хо­стин­гах вроде Ама­зон Клауд идут к херам и т.д.

 

До­бав­ле­но: боль­ше про­цес­со­ров, боль­ше багов. PoC пуб­лич­ное для Meltdown (Intel) и Spectre (до­ку­мент), это ве­се­ло.

Ком­мен­та­рий ре­дак­ции раз­де­ла ха­ке­ры

Комментарии

Аватар пользователя iUser
iUser (10 лет 8 месяцев)

Это не баг, это фича.
 

Аватар пользователя v.p.
v.p. (12 лет 7 месяцев)

 ну да, типа недав­ней про IME. мно­го­ва­то у Ин­те­ла фич в по­след­нее время на тему очень клё­вых бэк­до­ров :-)

Аватар пользователя katu
katu (13 лет 2 месяца)

а не за­гнул ли автор на­счет опас­но­сти вы­пол­не­ния джа­вас­крип­та в бра­у­зе­ре?

Аватар пользователя monk
monk (13 лет 2 месяца)

Не за­гнул: https://www.react-​etc.net/entry/exploiting-​speculative-execution-meltdow...

Прав­да раз­ра­бот­чи­ки бра­у­зе­ров вроде могут это по­бо­роть. Ско­рее всего с таким же па­де­ни­ем про­из­во­ди­тель­но­сти.

Аватар пользователя katu
katu (13 лет 2 месяца)

да, есть опи­са­ние того, как это тео­ре­ти­че­ски можно сде­лать при по­мо­щи джа­вас­крип­та с кучей ого­во­рок и при­ме­не­ни­ем дру­гих раз­лич­ных тех­но­ло­гий. Может я неправ, но есть по­до­зре­ние, что для успе­ха опе­ра­ции долж­но будет сой­тись слиш­ком много звезд на небе, и такой экс­плойт при­дет­ся раз­ра­ба­ты­вать ин­ди­ви­ду­аль­но под каж­до­го кон­крет­но­го кли­ен­та, и все это ради того, чтоб иметь воз­мож­ность за­гля­нуть на се­кун­доч­ку через за­моч­ную сква­жи­ну в кэш его проца, в ко­то­ром может быть, если опять очень очень по­ве­зет, в этот самый мо­мент ока­жет­ся номер его кре­дит­ки, про ко­то­рый еще надо будет как-​то по­нять, что это он и есть. По­хо­же сред­не­ста­ти­сти­че­ско­му поль­зо­ва­те­лю аф­те­шо­ка сле­ду­ет боль­ше пе­ре­жи­вать, что ему за­шлют дрона с ка­ме­рой, ко­то­рый через окно сни­мет, как он вво­дит свой па­роль с кла­ви­а­ту­ры.

Аватар пользователя 11
11 (7 лет 6 месяцев)

Ком­мен­та­рий ад­ми­ни­стра­ции:  
*** Лжи­вый ублю­док ***
Аватар пользователя vs451
vs451 (8 лет 1 месяц)

Грейтэ­гейн! При­дет­ся новый комп по­ку­пать, блин...!

Аватар пользователя vlkamov
vlkamov (13 лет 3 месяца)

Не новый, а ста­рый ;-)

Аватар пользователя vs451
vs451 (8 лет 1 месяц)

Кроме шуток. Где-​то видел за­мет­ку о том, что ай­фо­ны тор­мо­зят ста­рые вер­сии, типа чтобы заряд ба­та­реи доль­ше дер­жал­ся (на самом деле, чтобы лохи по­ско­рее новые те­ле­фо­ны по­ку­па­ли), а Интел рас­ска­зы­ва­ет о жут­кой дырке в про­цес­со­ре в тот мо­мент, когда нужно сде­лать Аме­ри­ку грейтэ­гейн, а имен­но про­дать кучу ба­рах­ла за боль­шие день­ги - новые про­цес­со­ры.

Аватар пользователя Ахура Мазда
Ахура Мазда (9 лет 6 месяцев)

Я по­ни­маю, что зву­чит как ТЗ, но что если суть имен­но в том, чтобы все сроч­но на­ка­ти­ли какой-​то там патч, ко­то­рый чего-​то там до­ба­вит, но по боль­шо­му счету никто не ста­нет смот­реть что?

Аватар пользователя monk
monk (13 лет 2 месяца)

Мик­ро­софт и так ре­гу­ляр­но патчи вы­да­ёт. В Linux kernel патч уже все по­смот­ре­ли и даже внес­ли из­ме­не­ния (убра­ли тор­мо­за на AMD и Intel Atom)

Аватар пользователя saenara
saenara (8 лет 5 месяцев)

Самое непри­ят­ное, что этот жир­ный песец вни­ма­тель­но смот­рит в сто­ро­ну вир­ту­а­ли­за­ции :-(

Ком­мен­та­рий ад­ми­ни­стра­ции:  
*** Ули­чен в роз­жи­ге по нац­при­зна­ку ***
Аватар пользователя ata
ata (13 лет 3 месяца)

Да уж.

Если ВМы не изо­ли­ро­ва­ны друг от друга на ап­па­рат­ном уровне, то все об­ла­ка на­кры­ва­ют­ся мед­ным тазом.

"Будет лас­ко­вый дождь..."

Аватар пользователя v.p.
v.p. (12 лет 7 месяцев)

я уже до­ба­вил в ав­тор­ский. по­след­ствия ре­аль­но чу­до­вищ­ные.

Аватар пользователя saenara
saenara (8 лет 5 месяцев)

К херам-​то они может и не пой­дут, за­пат­чат же, но про­сад про­из­во­ди­тель­но­сти вир­ту­аль­ных сред будет ад­ский. 

Ком­мен­та­рий ад­ми­ни­стра­ции:  
*** Ули­чен в роз­жи­ге по нац­при­зна­ку ***
Аватар пользователя v.p.
v.p. (12 лет 7 месяцев)

по­че­му я думаю чо будет груст­нее? ну как надо было ре­а­ли­зо­вы­вать VT extesions чтобы их вот так всё об­хо­ди­ло? текущую-​то про­бле­му по­пат­чат, а что де­лать с кон­цеп­ци­ей ре­а­ли­за­ции вир­ту­а­ли­за­ции на ин­те­лах?

Аватар пользователя BarBoss
BarBoss (10 лет 4 месяца)

Юные гей­ме­ры уже в ужасе от такой пер­спек­ти­вы. Деть ска­зал - "Не буду свой линух об­нов­лять!!! angry " Через несколь­ко часов - "А при­дёт­ся. sad "

Аватар пользователя iStalker
iStalker (13 лет 2 месяца)

Учи­ты­вая что этому багу уже 20+ лет, по­след­ствия все какие могли быть уже слу­чи­лись.

 

Аватар пользователя v.p.
v.p. (12 лет 7 месяцев)

ну тоже мне­ние. тогда надо ста­вить во­прос о вы­яв­ле­нии и за­чист­ке по­след­ствий, раз уж всплы­ло. а сколь­ко ещё всплы­вёт?

Аватар пользователя rukav
rukav (8 лет 10 месяцев)

Apple: Мы со­кра­ща­ем про­из­во­ди­тель­ность яй­фо­нов, как толь­ко при­хо­дит конец их ба­та­ре­ям и не со­об­ща­ем об этом вам. 

Intel: Мы со­кра­ща­ем про­из­во­ди­тель­ность каж­до­го про­цес­со­ра в мире на 30% из-за ста­рой дырки в нашей ар­хи­тек­ту­ре про­цес­со­ров.

Итоги:

Аватар пользователя лабиринт разума

Разве пол­мил­ли­о­на до­мо­ро­щен­ных хо­мяч­ков, ко­то­рым это сей­час слили, уже на­кле­па­ли из кон­струк­то­ров экс­плой­тов на базе этих уяз­ви­мо­стей?

Аватар пользователя Nordicx86
Nordicx86 (13 лет 3 месяца)

от пуб­ли­ка­ции кри­тич­ной дыры до экс­плой­та  обыч­но 8-10 часов..... раз­вер­ты­ва­ние в ин­тер­не­те си­сте­мы экс­плу­а­ти­ру­ю­щей "дыру" 3-5 дней.... и это С НУЛЯ, если уже есть схемы "вы­во­да" и тп то все в разы быст­рее.......

ДУ­МАЙ­ТЕ.....
 

Ком­мен­та­рий ад­ми­ни­стра­ции:  
*** Крип­тобес ***
Аватар пользователя joho
joho (11 лет 6 месяцев)

Фигня, ана­лог про­бле­мы 2000. 

Для экс­плу­а­та­ции уяз­ви­мо­сти тре­бу­ет­ся со­вер­шен­но кон­крет­ное по­ве­де­ние - экс­тре­маль­но вы­со­кий темп оши­бок по за­щи­те па­мя­ти, столь же вы­со­кий темп пе­ре­клю­че­ния кон­тек­стов - что и при­во­дит, кста­ти к очень скром­но­му темпу дам­пи­ро­ва­ния па­мя­ти. Дан­ное по­ве­де­ние будет, несо­мнен­но, мгно­вен­но вы­яв­лять­ся ан­ти­ви­ру­са­ми, и про­бле­ма стух­нет. 

Ну, если не счи­тать мас­со­вую за­куп­ку но­во­го же­ле­за и при­ну­ди­тель­ные тор­мо­за для всех опе­ра­ци­о­нок, за­бот­ли­во встав­лен­ное в них вен­до­ра­ми

Аватар пользователя Ахура Мазда
Ахура Мазда (9 лет 6 месяцев)

Выше на­пи­сал, что вся эта шу­ми­ха (а се­го­дня такой прием не но­вость) про­сто для от­вле­че­ния и на­кат­ки опре­де­лен­но­го  кода.

Аватар пользователя Nordicx86
Nordicx86 (13 лет 3 месяца)

для хо­мяч­ков - да

глав­ная жопа это "вир­ту­а­ли­за­ция" и Пуб­лич­ные об­ла­ка

Ком­мен­та­рий ад­ми­ни­стра­ции:  
*** Крип­тобес ***
Аватар пользователя joho
joho (11 лет 6 месяцев)

зна­чит, будут пла­тить за тол­ко­вый фай­р­вол, либо го­нять в пуб­лич­ном об­ла­ке код с цен­но­стью, рав­ной нулю. А вся­кие ворд­пре­сы как ло­ма­ли так и будут ло­мать

Оче­вид­но, что раз за­пус­ка­ешь свою под­си­сте­му на неиз­вест­но чьём же­ле­зе в ком­па­нии с неиз­вест­но кем, зна­чит не стоит на­деть­ся на кон­фи­ден­ци­аль­ность своих дан­ных. Си­ту­а­ция равна той, что тор­моз­ну­ли вир­ту­ал­ку, ско­пи­ро­ва­ли из неё всё, что надо, и даль­ше за­пу­сти­ли. И со­вер­шен­но нет раз­ни­цы, было ли это ЦРУ, СБУ, вен­дор или вася с со­сед­ней улицы.

Аватар пользователя monk
monk (13 лет 2 месяца)

Для экс­плу­а­та­ции уяз­ви­мо­сти тре­бу­ет­ся со­вер­шен­но кон­крет­ное по­ве­де­ние - экс­тре­маль­но вы­со­кий темп оши­бок по за­щи­те па­мя­ти, столь же вы­со­кий темп пе­ре­клю­че­ния кон­тек­стов

Если бы. Псев­до­код вы­гля­дит так:

int x = 0;
double y;
time_t times[256];
for(int n = 0; n < 256; ++n) {
   t1 = get_time();
   do_1000000times {
      if (likely(x!=0)) {
          if (readbyte(address)==n)
            y = atan(23143242.0);
      }
   }
   t2 = get_time();
   times[n] = t2;
}
n = find_greatest_time(times);
printf("byte at address %p = %02x\n",address,n);

Код  readbyte(address) ни­ко­гда не вы­пол­ня­ет­ся (так как x=0), по­это­му ошиб­ки па­мя­ти нет, но из-за спе­ку­ля­тив­но­го вы­пол­не­ния, в тот мо­мент, когда readbyte(address)==n всё равно дол­жен до­вы­чис­лять­ся atan. А зна­чит в этот мо­мент время вы­пол­не­ния ста­нет чуть боль­ше.

P.S. На самом деле if (readbyte(address)==n) де­лать нель­зя, так как он даст ещё одну ветку кон­вей­е­ра, там нужно ис­поль­зо­вать функ­цию, ко­то­рая для раз­ных зна­че­ний вы­пол­ня­ет­ся раз­ное время. Но суть того, что от­ло­вить такое по­ве­де­ние через кон­троль того, что вы­пол­ни­лось, невоз­мож­но.

Аватар пользователя joho
joho (11 лет 6 месяцев)

сда­ёт­ся мне, что же­ле­зу без­раз­лич­но, было ли чте­ние в "опе­ре­жа­ю­щем" ре­жи­ме, или в обыч­ном по­то­ке ис­пол­не­ния. Я бы по­ста­вил на сра­ба­ты­ва­ние ис­клю­че­ния по за­щи­те па­мя­ти от чте­ния.

Аватар пользователя monk
monk (13 лет 2 месяца)

Не без­раз­лич­но. Было бы стран­но по­лу­чать ошиб­ку чте­ния па­мя­ти на код x = 0; if(x) { /* здесь до­ступ к па­мя­ти */ }.

По­это­му про­вер­ка прав и вызов ис­клю­че­ния про­ис­хо­дят толь­ко если вы­пол­не­ние дей­стви­тель­но пошло по этой ветки (пред­ска­за­ние было верно). Ошиб­ка в том, что пред­ска­зан­ная ветка вы­пол­ня­ет­ся без про­вер­ки прав. Права про­ве­ря­ют­ся толь­ко если ис­пол­не­ние дей­стви­тель­но пошло по этому пути. Типа оп­ти­ми­за­ция.

Аватар пользователя joho
joho (11 лет 6 месяцев)

нор­маль­ные ком­пи­ля­то­ры такой код вы­ку­сы­ва­ют при оп­ти­ми­за­ции и у пра­виль­ных па­ца­нов всё оки. А гики, за­да­чей ко­то­рых яв­ля­ет­ся поиск недо­ку­мен­ти­ро­ван­ных фич, могут пе­ре­топ­тать­ся и с ис­клю­че­ни­ем. Впро­чем, это лишь моё пред­по­ло­же­ние

кроме того, если вы про­чи­та­ли опи­са­ние про­бле­мы, то люди ловят не ре­аль­ное чте­ние, а за­пол­не­ние кэша и позже пы­та­ют­ся вы­яс­нить, что имен­но за­к­э­ши­ро­ва­лось. За­груб­ле­ние тай­ме­ра решит дан­ный во­прос. Ча­стый замер вре­ме­ни поз­во­лит вы­явить сиг­на­ту­ру атаки.

Про­бле­ма есть, но не ужо­су­жос 

Аватар пользователя monk
monk (13 лет 2 месяца)

нор­маль­ные ком­пи­ля­то­ры такой код вы­ку­сы­ва­ют при оп­ти­ми­за­ции и у пра­виль­ных па­ца­нов всё оки.

Код может быть и такой: int x = factorial(5) - 120; if(x) { ... };

А гики, за­да­чей ко­то­рых яв­ля­ет­ся поиск недо­ку­мен­ти­ро­ван­ных фич, могут пе­ре­топ­тать­ся и с ис­клю­че­ни­ем.

С учё­том того, что 99% кода с ис­клю­че­ни­ем будет вы­гля­деть как if(p) { x = *p } (если ука­за­тель за­пол­нен, то разы­ме­но­ва­ва­ем) или даже if(o.alive) { x = *o.ref } (здесь как раз будет ошиб­ка до­сту­па, а не разы­ме­но­ва­ние пу­сто­го ука­за­те­ля, если усло­вие иг­но­ри­ро­вать), то я очень со­мне­ва­юсь, что это хо­ро­шая идея.

Аватар пользователя joho
joho (11 лет 6 месяцев)

Код может быть и такой: int x = factorial(5) - 120; if(x) { ... };

по­вто­рюсь, у ком­пи­ля­то­ра есть каль­ку­ля­тор :) и кон­стант­ные вы­ра­же­ния вы­чис­ля­ют­ся за­го­дя, по ним же де­ла­ет­ся оп­ти­ми­за­ция, в том числе ис­клю­че­ние неис­пол­ни­мо­го кода. На хабре была класс­ная ста­тья на эту тему, не могу найти 

По­это­му в нор­маль­ном коде такой кусок не сра­бо­та­ет. 

го­во­рю же, вы ко­па­е­те не туда. Утеч­ка идёт по по­боч­но­му ка­на­лу. Же­ле­зо не даёт про­чи­тать дан­ные на­пря­мую, это ис­клю­че­ние. Изу­ча­ет­ся быст­ро­дей­ствие - что имен­но по­па­ло в кэш в ка­че­стве prefetch. Про­бле­му, ИМХО, можно ре­шить за­груб­ле­ни­ем тай­ме­ра, атаку вы­явить его ин­тен­сив­ным ис­поль­зо­ва­ни­ем

Аватар пользователя monk
monk (13 лет 2 месяца)

кон­стант­ные вы­ра­же­ния вы­чис­ля­ют­ся за­го­дя, по ним же де­ла­ет­ся оп­ти­ми­за­ция, в том числе ис­клю­че­ние неис­пол­ни­мо­го кода

От­ку­да ком­пи­ля­тор знает, что функ­ция factorial из внеш­ней биб­лио­те­ки воз­вра­ща­ет кон­стант­ное вы­ра­же­ние? И не фор­ма­ти­ру­ет диск, на­при­мер. Ведь если фор­ма­ти­ру­ет, то это долж­но про­ис­хо­дить не при ком­пи­ля­ции про­грам­мы, а при вы­пол­не­нии.

А по сути смот­ри вто­рой абзац про ука­за­те­ли. Такой код встре­ча­ет­ся мас­со­во и ком­пи­ля­тор его вы­ки­нуть не может.

 Про­бле­му, ИМХО, можно ре­шить за­груб­ле­ни­ем тай­ме­ра, атаку вы­явить его ин­тен­сив­ным ис­поль­зо­ва­ни­ем

 В JS так сде­ла­но. "JavaScript does not provide access to the rdtscp instruction, and Chrome intentionally degrades the accuracy of its high-​resolution timer to dissuade timing attacks using performance.now() [1]. However, the Web Workers feature of HTML5 makes it simple to create a separate thread that repeatedly decrements a value in a shared memory location [18, 32]. This approach yielded a high-​resolution timer that provided sufficient resolution." © https://spectreattack.com/spectre.pdf

То есть до­ста­точ­но сде­лать вто­рой поток с цик­лом и счи­тать такты.

Аватар пользователя joho
joho (11 лет 6 месяцев)

А по сути смот­ри вто­рой абзац про ука­за­те­ли. Такой код встре­ча­ет­ся мас­со­во и ком­пи­ля­тор его вы­ки­нуть не может

Да, ко­неч­но, вы правы.

То есть до­ста­точ­но сде­лать вто­рой поток с цик­лом и счи­тать такты.

соб­ствен­но, с этим уже бо­рют­ся.

Specifically, in all release channels, starting with 57:

  • The resolution of performance.now() will be reduced to 20µs.
  • The SharedArrayBuffer feature is being disabled by default.

Furthermore, other timing sources and time-​fuzzing techniques are being worked on.

https://blog.mozilla.org/security/2018/01/03/mitigations-​landing-new-cla...

Аватар пользователя monk
monk (13 лет 2 месяца)
  • The SharedArrayBuffer feature is being disabled by default.

Для JS в бра­у­зе­ре это по­дой­дёт. Для вир­ту­а­лок и  про­из­воль­но­го кода это фак­ти­че­ски за­прет на мно­го­по­точ­ные при­ло­же­ния.

Аватар пользователя Praetor12
Praetor12 (12 лет 4 месяца)

Боль­шое спа­си­бо за код, так на­мно­го по­нят­нее в чем про­бле­ма. Толь­ко под­правь­те плз, вме­сто x=0 на тот же фак­то­ри­ал, ибо ре­аль­но даже gcc с -O0 про­сто вы­ки­нет эту про­вер­ку нафиг. До­бить­ся же­ла­е­мо­го по­ве­де­ния на C++ ком­пи­ля­то­рах та ещё за­да­ча. И вот это бы тоже раз­вер­нуть: 

do_1000000times {

А то не осо­бен­но по­нят­но, то ли это долж­но вы­пол­нить­ся много раз, то ли про­сто непо­нят­ная ин­струк­ция непо­нят­но­го псев­до­ко­да. 

Я даже не знал до се­го­дня о такой фиче про­цес­со­ров как спе­ку­ля­тив­ное вы­пол­не­ние, впро­чем на том языке в ко­то­ром я ра­бо­таю та­ко­го на­вер­ное и не до­бить­ся(

Аватар пользователя joho
joho (11 лет 6 месяцев)

суть вот в чём

Есть об­ласть па­мя­ти, недо­ступ­ная для user. Мы хотим про­чи­тать один байт по неко­то­ро­му ад­ре­су А.

Для этого бе­рёт­ся мас­сив B[ 256 х длину стро­ки кэша], нам до­ступ­ный, и пы­та­ем­ся ад­ре­со­вать­ся в нём бай­том из недо­ступ­ной нам об­ла­сти па­мя­ти. Од­на­ко, код, ко­то­рый это де­ла­ет, по­ме­ща­ем в недо­сти­жи­мый по по­то­ку ис­пол­не­ния фраг­мент.

Про­цес­сор, об­на­ру­жив ожи­да­е­мую по­пыт­ку кос­вен­ной ад­ре­са­ции, под­тя­ги­ва­ет в кэш стро­ку B[@A х длину стро­ки кэша] из на­ше­го бу­фе­ра, со­от­вет­ству­ю­щую со­дер­жи­мо­му байта из недо­ступ­ной нам па­мя­ти. Од­на­ко, по­сколь­ку фраг­мент ре­аль­но не ис­пол­ня­ет­ся в нашем по­то­ке, то мы "как бы" и не чи­та­ли этот байт, по­то­му ис­клю­че­ния по за­щи­те па­мя­ти может не слу­чить­ся. Ре­зуль­та­том будет кэ­ши­ро­ва­ние стро­ки на­ше­го мас­си­ва, со­от­вет­ству­ю­щей со­дер­жи­мо­му байту @A. По­это­му речь идёт о стро­ке, рав­ной раз­ме­ру стро­ки кэша. Мы не можем под­тя­нуть один байт из мас­си­ва В.

После чего мы чи­та­ем наш мас­сив, и смот­рим время до­сту­па. Если мы чи­та­ем стро­ку, ко­то­рая уже в кэше, это про­ис­хо­дит быст­рее, чем стро­ка, ко­то­рой в кэше нет. Таким об­ра­зом, можно сде­лать пред­по­ло­же­ние о со­дер­жи­мом байта по недо­ступ­но­му ад­ре­су. От­сю­да необ­хо­ди­мость вы­пол­нять чте­ние мно­го­крат­но, что бы дель­та по вре­ме­ни стала за­мет­ной. Так же от­сю­да необ­хо­ди­мость вы­пол­нять про­це­ду­ру мно­го­крат­но, что бы на­брать зна­чи­мую ста­ти­сти­ку. В итоге, низ­кая ско­рость до­сту­па до слу­жеб­ных дан­ных и ве­ро­ят­ност­ный ре­зуль­тат.

 

Аватар пользователя Lokki
Lokki (10 лет 1 месяц)

И  ещё надо мо­лить­ся за то, что бы это добро отр­п­бо­та­ло в одном кван­те вре­ме­ни и ОС не пе­ре­ки­ну­ла в дру­гое ядро.

Теже кеды очень ловко пе­ре­ки­ды­ва­ют по ядрам, что бы они гре­лись боле-​менее рав­но­мер­но.

Аватар пользователя Rashad_rus
Rashad_rus (13 лет 2 месяца)

Про­бле­ма до­ста­точ­но про­сто ре­ша­ет­ся, если юзать vmware со всеми за­плат­ка­ми, в том числе и ядер­ны­ми, типа - су­нул­ся не к себе без раз­ре­ше­ния - про­цесс уби­ва­ет­ся - потом юз­ве­рю объ­яс­нить, что он хват­нул каку и его ма­ши­на будет ле­жать до тех пор, по­ку­да он не пе­ре­уста­но­вит си­сте­му, иначе оная будет ре­бу­тать­ся до мор­ков­ки­но­го за­го­ве­ния. Под Windows - такой ва­ри­ант не ра­бо­та­ет, толь­ко если пат­чить жест­ко.

Аватар пользователя ОЛЕГ
ОЛЕГ (10 лет 5 месяцев)

Так для ис­поль­зо­ва­ния дыры не надо ни­ку­да со­вать­ся без раз­ре­ше­ния. До­ста­точ­но в одной по­ло­вине раз­ветв­ле­ния на­ри­со­вать до­ступ к несво­ей па­мя­ти, а вы­пол­нять дру­гую по­ло­ви­ну. Ин­те­лов­ский до­ста­валь­щик из па­мя­ти за­не­сёт в кэш со­дер­жи­мое обеих веток - не про­ве­ряя: есть ли раз­ре­ше­ние на до­ступ к ним.

Аватар пользователя Rashad_rus
Rashad_rus (13 лет 2 месяца)

Ре­ко­мен­дую про­ве­рить, до­ста­точ­но по­ве­сить немас­ки­ру­е­мое пре­ры­ва­ние в ядро с кон­тро­лем до­сту­па к своей па­мя­ти и все по­пыт­ки лезть куда не надо - можно пре­се­кать так, как счи­та­е­те нуж­ным. Про­ве­рял. А вся беда в том, что про­грам­ми­сты ПРИ­ВЫК­ЛИ к же­лез­ной за­щи­те и поль­зу­ют стан­дарт­ные биб­лио­те­ки, но не за­бо­тят­ся об ос­но­вах...))))

Аватар пользователя ОЛЕГ
ОЛЕГ (10 лет 5 месяцев)

if таб­ли­ца__не_ини­ци­а­ли­зи­ро­ва­на :
    за­про­сить за­пол­не­ние таб­ли­цы
сде­лать пе­ре­ход по ад­ре­су из таб­ли­цы

Ин­те­лов­ский оп­ти­ми­за­тор вы­пол­ня­ет обе ветки ветв­ле­ния. По­нят­но, что если таб­ли­ца не ини­ци­а­ли­зи­ро­ва­на, пе­ре­ход по ад­ре­су из таб­ли­цы будет в куда_не_надо,

За­щи­та, ко­то­рая от­ру­ба­ет про­грам­му из-за того, что пе­ре­ход внут­ри одной из веток стоит не туда, такую про­грам­му убьёт. А про­грам­ма - нор­маль­ная.

Аватар пользователя Mc_Aaron
Mc_Aaron (10 лет 1 месяц)

Не факт, по­сколь­ку ветв­ле­ние тре­бу­ет в ОС со­зда­ния блока опи­са­ния по­то­ка и ре­ги­стра­ции в пла­ни­ров­щи­ке. В этот мо­мент поль­зо­ва­тель­ский про­цесс будет при­оста­нав­лен и с ве­ро­ят­но­стью на  ноль целых и ноль де­ся­тых менее еди­ни­цы будет вы­тес­нен. За то время, пока он вер­нет­ся на ядро, вы­пол­нит­ся куча кода, как са­мо­го ядра, та и по­лу­сот­ни дру­гих про­цес­сов и по­то­ков, ко­то­рые  все кеши по­ку­ро­чат под себя.

Аватар пользователя ОЛЕГ
ОЛЕГ (10 лет 5 месяцев)

Вы ведь про ветв­ле­ние, ко­то­рое со­зда­ние новой ветви (thread), по­то­ка вы­пол­не­ния ко­манд? Да, со­гла­сен. Но я под ветв­ле­ни­ем под­ра­зу­ме­вал ветв­ле­ние внут­ри од­но­го по­то­ка вы­пол­не­ния, код, ко­то­рый воз­ни­ка­ет в ре­зуль­та­те ком­пи­ля­ции услов­но­го опе­ра­то­ра "if".

Аватар пользователя Mc_Aaron
Mc_Aaron (10 лет 1 месяц)

Об этом не по­ду­мал. Тогда ждем воз­врат ита­ни­у­ма и взлет эль­бру­са. Во вто­ром пла­ни­ро­ва­ние по­то­ков ста­ти­че­ское на ста­дии ко­до­ге­не­ра­ции, воз­мож­но в пер­вом ана­ло­гич­но.

Аватар пользователя Rashad_rus
Rashad_rus (13 лет 2 месяца)

Ха! А для таких целей и су­ще­ству­ют серые сети, ко­то­рые не по­бом­бишь...)))))))))))

Аватар пользователя ata
ata (13 лет 3 месяца)

Жесть.

Неда­ром фон Ней­ман и Doomsday machine при­ду­мал.

Аватар пользователя iUser
iUser (10 лет 8 месяцев)

Не на­гне­тай­те - это все для удоб­ства и без­опас­но­сти поль­зо­ва­те­ля! )))
 

Аватар пользователя ata
ata (13 лет 3 месяца)

Ну так и Ма­ши­на Суд­но­го дня - тоже :)

Аватар пользователя Волшебник Вголубомвертолете

По­хо­же пора пе­ре­хо­дить на Qubes OS

Ком­мен­та­рий ад­ми­ни­стра­ции:  
*** От­клю­чен (лидер бан-​рейтинга + на­ру­ше­ние до­го­во­рен­но­сти под ко­то­рые со­гла­си­лись оста­вить) ***

Страницы