Comment by gwd
4 years ago
> This is hyperbole to the point of being nonsensical.
I think you can only say this if you've never had aggressive compiler optimizations introduce security issues into perfectly reasonable-looking code.
Quiz, what's wrong with the following code?
int buflen, untrusted;
char buf[MAX];
/* `untrusted` comes from an untrusted source */
if (buflen + untrusted > MAX) {
return -EINVAL;
}
The answer of course is that integer overflow is undefined; so if buflen + untrusted is greater than INT_MAX, the compiler is allowed to do absolutely anything it wants; and making sure it's only allowed to do something sensible turns out to be extremely difficult.
EDIT For instance, in an earlier age, people might have done something like this:
if (buflen + untrusted > MAX || buflen + untrusted < buflen)
But the second clause relies on overflow. The compiler is perfectly justified in saying, "Well, overflow is UB anyway, so if it happens, I'm allowed to not do anything; so I'll just make this code more efficient by removing that check entirely."
No comments yet
Contribute on Hacker News ↗