Thread (1 message) 1 message, 1 author, 2015-12-04

Re: bpf: undefined shift in __bpf_prog_run

flat view

From: Alexei Starovoitov <hidden>
Date: 2015-12-04 20:50:59
Also in: lkml

On Fri, Dec 04, 2015 at 12:44:09PM -0800, Kostya Serebryany wrote:
On Fri, Dec 4, 2015 at 12:35 PM, Alexei Starovoitov <
alexei.starovoitov@gmail.com> wrote:
quoted
On Fri, Dec 04, 2015 at 08:48:57PM +0100, Dmitry Vyukov wrote:
quoted
For example, a compiler can assume that result of left shift is larger
or equal to first operand, which in turn can allow it to elide some
bounds check in code, which in turn can lead to an exploit. I am not
saying that this particular pattern is present in the code, what I
want to say is that such undefined behaviors can lead to very
unpredictable and unexpected consequences.
Within bpf it cannot.
shift is not used in any memory or bounds operations.
so reg <<= 1234 cannot be exploited.
I afraid this is not that simple.
In C, undefined behavior applies to the entire program, not just to a
single instruction.
My favorite example:
http://stackoverflow.com/questions/7682477/why-does-integer-overflow-on-x86-with-gcc-cause-an-infinite-loop
Here an undefined behavior in one instruction causes *other* instructions
to misbehave.
that's actually not related example. There compiler takes advantage of undefined
behavior which is very typical for compiler to do.
for(int i = 0; i < 100; i++)
and
for(unsigned int i = 0; i < 100; i++)
are very different loops from compiler point of view.

but that is not applicable in bpf world.
there are no loops in bpf in the first place.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help