From: Josef Bacik <jba...@fb.com> Date: Wed, 28 Sep 2016 10:54:32 -0400
> Suppose you have a map array value that is something like this > > struct foo { > unsigned iter; > int array[SOME_CONSTANT]; > }; > > You can easily insert this into an array, but you cannot modify the contents > of > foo->array[] after the fact. This is because we have no way to verify we > won't > go off the end of the array at verification time. This patch provides a start > for this work. We accomplish this by keeping track of a minimum and maximum > value a register could be while we're checking the code. Then at the time we > try to do an access into a MAP_VALUE we verify that the maximum offset into > that > region is a valid access into that memory region. So in practice, code such > as > this > > unsigned index = 0; > > if (foo->iter >= SOME_CONSTANT) > foo->iter = index; > else > index = foo->iter++; > foo->array[index] = bar; > > would be allowed, as we can verify that index will always be between 0 and > SOME_CONSTANT-1. If you wish to use signed values you'll have to have an > extra > check to make sure the index isn't less than 0, or do something like index %= > SOME_CONSTANT. > > Signed-off-by: Josef Bacik <jba...@fb.com> > Acked-by: Alexei Starovoitov <a...@kernel.org> Applied, thanks.