Linked by Thom Holwerda on Tue 22nd May 2012 23:26 UTC
Thread beginning with comment 519123
To view parent comment, click here.
To read all comments associated with this story, please click here.
To view parent comment, click here.
To read all comments associated with this story, please click here.
A safer language would have a runtime error when such situations get detected.
Let's forget for a moment that C++ has both the STL and Boost, which demonstrate how to use C++ without needing pointer math, if they themselves can't be used...
Without pointer math no need for logic errors that turn into buffer exploits.
Really, so how would a language like Ada, which you mentioned, handle buffers (arrays) without "pointer math"? And, pray tell, how do you propose a "safe" language like Ada communicate with a GPU without passing it raw buffer instructions?
You're seriously trying to tell me that a "safe" language can read a programmer's mind and work out how to translate its memory model into something the GPU knows?
Here's a hint, any "safe" language requiring such functionality will need to have it written for it, which does nothing to prevent a similar bug from being introduced in that manner.
My Quantum Dot! What kind of people do they churn out of CS courses these days?
RE[9]: Comment by Radio
by moondevil on Wed 23rd May 2012 14:20
in reply to "RE[8]: Comment by Radio"
Let's forget for a moment that C++ has both the STL and Boost, which demonstrate how to use C++ without needing pointer math, if they themselves can't be used...
Library != Language
Really, so how would a language like Ada, which you mentioned, handle buffers (arrays) without "pointer math"?
With normal indexes, coupled with bound checked access.
My Quantum Dot! What kind of people do they churn out of CS courses these days?
Same to you, end of conversation. Bye.





Member since:
2005-07-08
Yes, because if you really cared to read everything, you will see that the outcome of such functions is used for buffer manipulation tricks.
The next thing Pinkie needed was a target that met two criteria: it had to be positioned within range of his overwrite, and the first eight bytes needed to be something worth changing. For this, he used the GPU buckets, which are another IPC primitive exposed from the GPU process to the Native Client process. The buckets are implemented as a tree structure, with the first eight bytes containing pointers to other nodes in the tree. By overwriting the first eight bytes of a bucket, Pinkie was able to point it to a fake tree structure he created in one of his transfer buffers. Using that fake tree, Pinkie could read and write arbitrary addresses in the GPU process. Combined with some predictable addresses in Windows, this allowed him to build a ROP chain and execute arbitrary code inside the GPU process.
A safer language would have a runtime error when such situations get detected.
The logic error as you called is only required, because they need to calculate specific values for pointer math. Without pointer math no need for logic errors that turn into buffer exploits.