@ -363,15 +363,15 @@ static struct bpf_align_test tests[] = {
* is still ( 4 n ) , fixed offset is not changed .
* Also , we create a new reg - > id .
*/
{ 29 , " R5=pkt(id=4,off=18,r=0,umax_value=2040,var_off=(0x0; 0x7fc)) " } ,
{ 29 , " R5=pkt(id=4,off=18,r=0,umax_value=2040,var_off=(0x0; 0x7fc) " } ,
/* At the time the word size load is performed from R5,
* its total fixed offset is NET_IP_ALIGN + reg - > off ( 18 )
* which is 20. Then the variable offset is ( 4 n ) , so
* the total offset is 4 - byte aligned and meets the
* load ' s requirements .
*/
{ 33 , " R4=pkt(id=4,off=22,r=22,umax_value=2040,var_off=(0x0; 0x7fc)) " } ,
{ 33 , " R5=pkt(id=4,off=18,r=22,umax_value=2040,var_off=(0x0; 0x7fc)) " } ,
{ 33 , " R4=pkt(id=4,off=22,r=22,umax_value=2040,var_off=(0x0; 0x7fc) " } ,
{ 33 , " R5=pkt(id=4,off=18,r=22,umax_value=2040,var_off=(0x0; 0x7fc) " } ,
} ,
} ,
{
@ -414,15 +414,15 @@ static struct bpf_align_test tests[] = {
/* Adding 14 makes R6 be (4n+2) */
{ 9 , " R6=inv(id=0,umin_value=14,umax_value=1034,var_off=(0x2; 0x7fc)) " } ,
/* Packet pointer has (4n+2) offset */
{ 11 , " R5=pkt(id=1,off=0,r=0,umin_value=14,umax_value=1034,var_off=(0x2; 0x7fc)) " } ,
{ 13 , " R4=pkt(id=1,off=4,r=0,umin_value=14,umax_value=1034,var_off=(0x2; 0x7fc)) " } ,
{ 11 , " R5=pkt(id=1,off=0,r=0,umin_value=14,umax_value=1034,var_off=(0x2; 0x7fc) " } ,
{ 13 , " R4=pkt(id=1,off=4,r=0,umin_value=14,umax_value=1034,var_off=(0x2; 0x7fc) " } ,
/* At the time the word size load is performed from R5,
* its total fixed offset is NET_IP_ALIGN + reg - > off ( 0 )
* which is 2. Then the variable offset is ( 4 n + 2 ) , so
* the total offset is 4 - byte aligned and meets the
* load ' s requirements .
*/
{ 15 , " R5=pkt(id=1,off=0,r=4,umin_value=14,umax_value=1034,var_off=(0x2; 0x7fc)) " } ,
{ 15 , " R5=pkt(id=1,off=0,r=4,umin_value=14,umax_value=1034,var_off=(0x2; 0x7fc) " } ,
/* Newly read value in R6 was shifted left by 2, so has
* known alignment of 4.
*/
@ -430,15 +430,15 @@ static struct bpf_align_test tests[] = {
/* Added (4n) to packet pointer's (4n+2) var_off, giving
* another ( 4 n + 2 ) .
*/
{ 19 , " R5=pkt(id=2,off=0,r=0,umin_value=14,umax_value=2054,var_off=(0x2; 0xffc)) " } ,
{ 21 , " R4=pkt(id=2,off=4,r=0,umin_value=14,umax_value=2054,var_off=(0x2; 0xffc)) " } ,
{ 19 , " R5=pkt(id=2,off=0,r=0,umin_value=14,umax_value=2054,var_off=(0x2; 0xffc) " } ,
{ 21 , " R4=pkt(id=2,off=4,r=0,umin_value=14,umax_value=2054,var_off=(0x2; 0xffc) " } ,
/* At the time the word size load is performed from R5,
* its total fixed offset is NET_IP_ALIGN + reg - > off ( 0 )
* which is 2. Then the variable offset is ( 4 n + 2 ) , so
* the total offset is 4 - byte aligned and meets the
* load ' s requirements .
*/
{ 23 , " R5=pkt(id=2,off=0,r=4,umin_value=14,umax_value=2054,var_off=(0x2; 0xffc)) " } ,
{ 23 , " R5=pkt(id=2,off=0,r=4,umin_value=14,umax_value=2054,var_off=(0x2; 0xffc) " } ,
} ,
} ,
{
@ -473,11 +473,11 @@ static struct bpf_align_test tests[] = {
. matches = {
{ 4 , " R5=pkt_end(id=0,off=0,imm=0) " } ,
/* (ptr - ptr) << 2 == unknown, (4n) */
{ 6 , " R5=inv(id=0,smax_value=9223372036854775804,umax_value=18446744073709551612,var_off=(0x0; 0xfffffffffffffffc)) " } ,
{ 6 , " R5=inv(id=0,smax_value=9223372036854775804,umax_value=18446744073709551612,var_off=(0x0; 0xfffffffffffffffc) " } ,
/* (4n) + 14 == (4n+2). We blow our bounds, because
* the add could overflow .
*/
{ 7 , " R5=inv(id=0,var_off=(0x2; 0xfffffffffffffffc) ) " } ,
{ 7 , " R5=inv(id=0,smin_value=-9223372036854775806,smax_value=9223372036854775806,umin_value=2,umax_value=18446744073709551614, var_off=(0x2; 0xfffffffffffffffc) " } ,
/* Checked s>=0 */
{ 9 , " R5=inv(id=0,umin_value=2,umax_value=9223372036854775806,var_off=(0x2; 0x7ffffffffffffffc)) " } ,
/* packet pointer + nonnegative (4n+2) */
@ -532,7 +532,7 @@ static struct bpf_align_test tests[] = {
/* New unknown value in R7 is (4n) */
{ 11 , " R7=inv(id=0,umax_value=1020,var_off=(0x0; 0x3fc)) " } ,
/* Subtracting it from R6 blows our unsigned bounds */
{ 12 , " R6=inv(id=0,smin_value=-1006,smax_value=1034,var_off=(0x2; 0xfffffffffffffffc) ) " } ,
{ 12 , " R6=inv(id=0,smin_value=-1006,smax_value=1034,umin_value=2,umax_value=18446744073709551614, var_off=(0x2; 0xfffffffffffffffc) " } ,
/* Checked s>= 0 */
{ 14 , " R6=inv(id=0,umin_value=2,umax_value=1034,var_off=(0x2; 0x7fc)) " } ,
/* At the time the word size load is performed from R5,
@ -541,7 +541,8 @@ static struct bpf_align_test tests[] = {
* the total offset is 4 - byte aligned and meets the
* load ' s requirements .
*/
{ 20 , " R5=pkt(id=1,off=0,r=4,umin_value=2,umax_value=1034,var_off=(0x2; 0x7fc)) " } ,
{ 20 , " R5=pkt(id=1,off=0,r=4,umin_value=2,umax_value=1034,var_off=(0x2; 0x7fc) " } ,
} ,
} ,
{