Patch "bpf: improve verifier packet range checks" has been added to the 4.9-stable tree
Subsystems (3)
This is a note to let you know that I've just added the patch titled
bpf: improve verifier packet range checks
to the 4.9-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
bpf-improve-verifier-packet-range-checks.patch
and it can be found in the queue-4.9 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From foo@baz Sat Apr 29 08:22:13 CEST 2017
From: Alexei Starovoitov <[email protected]>
Date: Fri, 24 Mar 2017 15:57:33 -0700
Subject: bpf: improve verifier packet range checks
From: Alexei Starovoitov <[email protected]>
[ Upstream commit b1977682a3858b5584ffea7cfb7bd863f68db18d ]
llvm can optimize the 'if (ptr > data_end)' checks to be in the order slightly different than the original C code which will confuse verifier. Like:
if (ptr + 16 > data_end)
return TC_ACT_SHOT;
// may be followed by
if (ptr + 14 > data_end)
return TC_ACT_SHOT;
while llvm can see that 'ptr' is valid for all 16 bytes,
the verifier could not.
Fix verifier logic to account for such case and add a test.
--- kernel/bpf/verifier.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
kernel/bpf/verifier.c +3 -2
@@ -1829,14 +1829,15 @@ static void find_good_pkt_pointers(strucfor (i =0 ; i <MAX_BPF_REG ; i++)if (regs[i].type ==PTR_TO_PACKET && regs[i].id == dst_reg->id) - regs[i].range = dst_reg->off; +/* keep the maximum range already checked */ + regs[i].range =max (regs[i].range, dst_reg->off);for (i =0 ; i <MAX_BPF_STACK ; i +=BPF_REG_SIZE ) {if (state->stack_slot_type[i] !=STACK_SPILL )continue ; reg = &state->spilled_regs[i /BPF_REG_SIZE ];if (reg->type ==PTR_TO_PACKET && reg->id == dst_reg->id) - reg->range = dst_reg->off; + reg->range =max (reg->range, dst_reg->off); } }
Patches currently in stable-queue which might be from [email protected] are
queue-4.9/bpf-improve-verifier-packet-range-checks.patch