3 ms·
You still are not guaranteed to clear the buffer like that. for (int i=0; i<len; i++){ sensitiveBuffer[i]=random(); } int sum=0; for (int i=0; i<le
by gizmo686 12y ago
You still are not guaranteed to clear the buffer like that.
for (int i=0; i<len; i++){
sensitiveBuffer[i]=random();
}
int sum=0;
for (int i=0; i<len; i++){
sum+=sensitiveBuffer[i];
}
volitileVar=sum;
Using loop fusion, the compiler can optimize this to:
int sum=0;
for (int i=0; i<len; i++){
sensitiveBuffer[i]=random();
sum+=sensitiveBuffer[i];
}
volitileVar=sum;
Which it can then optimize to:
int sum=0;
for (int i=0; i<len; i++){
sum+=random();
}
volitileVar=sum;
In fact, as the article points out, the compiler can legally transform:
reallyZeroBuffer(sensitiveBuffer);
into
pointlesslyCopy(sensitiveBuffer);
reallyZeroBuffer(sensitiveBuffer);
- xxs 12y agonot like that: Not exactly like that: I didn't mean simple that way, more like hash alike. The 1st example is not optimal but shows the idea. I disagree about "pointlessCopy". Of course it's permitted by the standard but it's not an optimization. Using such a broken compiler is beyond help. ------- volatileVar *= random(); for (int i=0;i<len;i++){ volatileVar+=buf[random()%len]+0x61c88647; buf[i]=volatileVar; } ===== static volatile uint volitileVar; for (int i=0; i<len; i++){ sensitiveBuffer[i]=random(); } for (int i=0; i<len; i++){ volitileVar+=sensitiveBuffer[volatileVar%len]; }