News for hackers. Stuff that matters.
Re:Linux Kernel Use-After-Free Remote Code Execution Vulnera... by xenadu02 on Wednesday October 05, 2016 @12:41AM (#12641593)
"The revolution will not be televised".

The beginning of the end of use-after-free, buffer overflows, stack smashers, et al will be when we as a community finally accept that C is a terrible language, impossible for ordinary humans to reason about, and must be abandoned. Only when we begin to accept that truth will we all get serious about moving away from it.

For many years the response has been that "C is fine" or some variant of "humans will be better programmers in the future" both of which are demonstrably false.

No one questions the wisdom of paramtaraizing SQL. No one questions the wisdom of not writing your own crypto. Yet despite the mountains of evidence, wasting billions (yes BILLIONS) of man-hours and dollars, and even lives lost there is still resistance to the idea that C needs to die ASAP.

So as long as there are posts like yours our job of educating and persuading isn't finished and that's extremely important if we have a hope of actually making this desperately needed change.

If you still doubt let me go ahead and make a prediction: before the end of the year there will be another RCE exploit in the Linux kernel discovered and a different one will be written, code-reviewed, and committed but not discovered until later (but within 5 years). I'm happy to put $1,000 on this wager.

Re:Linux Kernel Use-After-Free Remote Code Execution Vulnera... by qwertyuiop924 on Wednesday October 05, 2016 @05:21AM (#12642541)
I've got no problem admitting that C isn't good enough in most cases, and should probably die. I know that's true. I'm just sick of the annoyingly smug comments about it that pop up like mushrooms on HN. If you're posting here, you're more often than not preaching to the choir.
Re:Linux Kernel Use-After-Free Remote Code Execution Vulnera... by GrumpyYoungMan on Wednesday October 05, 2016 @03:00PM (#12646727)
>The beginning of the end of use-after-free, buffer overflows, stack smashers, et al will be when we as a community finally accept that C is a terrible language, impossible for ordinary humans to reason about, and must be abandoned.

1) All the complaints you have apply equally well to assembly language, yet assembly language is all that the CPU understands. Somebody always has to deal with the low level complexity of writing the foundational software constructs necessary to build safe environments and C is still the most natural mapping to varied assembly languages that we have.

2) Nothing else will fit for many embedded systems. Your choices are C or assembly language. What safe environment/language are you going to fit into a microcontroller with 1kB of RAM?

(And, yes, maybe Rust or one of the other proposed system language replacements will be better than C someday, but that someday isn't today.)

Re:Linux Kernel Use-After-Free Remote Code Execution Vulnera... by dragonwriter on Wednesday October 05, 2016 @03:04PM (#12646749)
> All the complaints you have apply equally well to assembly language, yet assembly language is all that the CPU understands.

No, machine code is all that the CPU understands. Assembly language is source code that gets converted into machine code by an assembler.

Re:Linux Kernel Use-After-Free Remote Code Execution Vulnera... by crististm on Wednesday October 05, 2016 @02:28AM (#12641915)
Actually, it is still possible to use C as a higher than assembly target language for compilers.
Re:Linux Kernel Use-After-Free Remote Code Execution Vulnera... by MaulingMonkey on Wednesday October 05, 2016 @02:42AM (#12641953)
While I'm really interested in this for making languages available everywhere (tm), basic things like signed integer overflow being undefined behavior make me question is C is fit for purpose even here.
Re:Linux Kernel Use-After-Free Remote Code Execution Vulnera... by jjnoakes on Wednesday October 05, 2016 @08:07AM (#12643113)
Since you are generating the C code, you can generate the appropriate checks where needed to avoid such undefined behavior too.
Re:Linux Kernel Use-After-Free Remote Code Execution Vulnera... by MaulingMonkey on Wednesday October 05, 2016 @08:56AM (#12643370)
Which is the one thing keeping it in the running.

The problem is this line of reasoning doesn't generally hold up when applied to C codebases (because in practice statistics catches up with you eventually) and C code generators, in effect, happen to contain an admittedly small but rather obfuscated C codebase.

Moreover, you must always include such checks - manually crashing on e.g. null pointers even if you'd be entirely satisfied with a segfault - just to avoid the optimizer potentially going apeshit on your code. Which can have... poor effects on program performance.

Re:Linux Kernel Use-After-Free Remote Code Execution Vulnera... by jjnoakes on Wednesday October 05, 2016 @02:31PM (#12646479)
If you are writing a code generator, it all depends on the source language. If, for example, your source language doesn't have NULL pointers, then you don't have to waste cycles checking them in C.
Re:Linux Kernel Use-After-Free Remote Code Execution Vulnera... by progman on Wednesday October 05, 2016 @11:24AM (#12644621)
Indeed. That's what Nim and Rust (for instance) can do to ease porting to other platforms. Even safety critical applications can be written in C by using tools like FramaC.

https://frama-c.com