3 ms·
You're correct - the compiler operates within the memory model of the language. But C / C++'s memory model is broken w.r.t. security. There is no way to ensure
by TheLoneWolfling 11y ago
You're correct - the compiler operates within the memory model of the language. But C / C++'s memory model is broken w.r.t. security.
There is no way to ensure that something is actually overwritten, because under the memory models of C and C++ you cannot ever read that memory again, even though in actuality you can.
- ikeboy 11y agoWhy not generate random data then read it? Or even a constant, then read it?
- TheLoneWolfling 11y agoBecause the compiler will optimize it out. Even if you return the random data / constant the compiler will optimize out the store to the variable and just pass it through directly.
- Joky 11y agoI believe volatile force the compiler to issue a real write to memory and can't be optimized away.
- TheLoneWolfling 11y agoExcept, of course, that the compiler can perfectly legally copy the variable behind the scenes and not overwrite the copy. I mean it when I say you cannot.
- Joky 11y agoI'm not sure what you mean here, if you have a volatile pointer that points to a memory buffer returned by malloc, how can the compiler prevents a write through the pointer from happening? Edit: unless your point is a temporary copy can be spilled in memory and this copy will stay in memory and won't be overwritten?
- TheLoneWolfling 11y agoYes, your edit is correct.