net/bpf
Arthur Fabre 27ecd3f315 bpf: fix VM out of bounds LoadMemShift check
The bpf VM did not correctly check the bounds of LoadMemShift
instructions, as it used a size of 0 instead of the correct 1.

A LoadMemShift instruction 1 past the end of the input resulted in a
runtime panic:

    panic(0x5c1d40, 0x7cec00)
            /usr/local/go/src/runtime/panic.go:522 +0x1b5
    golang.org/x/net/bpf.loadMemShift(...)
            /home/afabre/go/pkg/mod/golang.org/x/net@v0.0.0-20190603091049-60506f45cf65/bpf/vm_instructions.go:137
    golang.org/x/net/bpf.(*VM).Run(0xc00000ec40, 0xc0000173c8, 0x2, 0x8, 0x2, 0xc0000173c8, 0x0)
            /home/afabre/go/pkg/mod/golang.org/x/net@v0.0.0-20190603091049-60506f45cf65/bpf/vm.go:131 +0xb0a

Fix this, and rework the out of bounds tests for load instructions to:

* Use an offset one past the end of the input, to catch this

* Use a filter that returns 1, to catch cases were the out of bounds
load does not cause a panic, but does not cause the VM to return 0.

Change-Id: I1e68886915207a34f59765805f907f36dc031f70
Reviewed-on: https://go-review.googlesource.com/c/net/+/180979
Run-TryBot: Matt Layher <mdlayher@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Matt Layher <mdlayher@gmail.com>
2019-06-07 17:17:31 +00:00
..
testdata bpf: support JumpIf on RegX instead of K 2018-10-11 14:41:30 +00:00
asm.go bpf: new package to assemble and disassemble Berkeley Packet Filter programs. 2016-03-28 06:22:12 +00:00
constants.go bpf: support JumpIf on RegX instead of K 2018-10-11 14:41:30 +00:00
doc.go bpf: add Go implementation of virtual machine 2016-06-18 00:31:17 +00:00
instructions.go bpf: support JumpIf on RegX instead of K 2018-10-11 14:41:30 +00:00
instructions_test.go bpf: support JumpIf on RegX instead of K 2018-10-11 14:41:30 +00:00
setter.go bpf: add Setter interface 2017-06-13 04:21:24 +00:00
vm.go bpf: support JumpIf on RegX instead of K 2018-10-11 14:41:30 +00:00
vm_aluop_test.go bpf: add Go implementation of virtual machine 2016-06-18 00:31:17 +00:00
vm_bpf_test.go bpf: use of nettest 2019-03-27 21:43:19 +00:00
vm_extension_test.go bpf: implement LoadExtension and ExtLen for VM 2016-06-20 21:42:44 +00:00
vm_instructions.go bpf: fix VM out of bounds LoadMemShift check 2019-06-07 17:17:31 +00:00
vm_jump_test.go bpf: support JumpIf on RegX instead of K 2018-10-11 14:41:30 +00:00
vm_load_test.go bpf: fix VM out of bounds LoadMemShift check 2019-06-07 17:17:31 +00:00
vm_ret_test.go bpf: add Go implementation of virtual machine 2016-06-18 00:31:17 +00:00
vm_scratch_test.go bpf: add Go implementation of virtual machine 2016-06-18 00:31:17 +00:00
vm_test.go bpf: fix a typo 2016-06-19 23:45:41 +00:00