mbox series

[net,0/4] bpf: fix semantics issues with helpers receiving NULL arguments

Message ID 20171122183256.7219-1-g.borello@gmail.com
Headers show
Series bpf: fix semantics issues with helpers receiving NULL arguments | expand

Message

Gianluca Borello Nov. 22, 2017, 6:32 p.m. UTC
This set includes some fixes in semantics and usability issues that emerged
recently, and would be good to have them in net before the next release.

In particular, ARG_CONST_SIZE_OR_ZERO semantics was recently changed in
commit 9fd29c08e520 ("bpf: improve verifier ARG_CONST_SIZE_OR_ZERO
semantics") with the goal of letting the compiler generate simpler code
that the verifier can more easily accept.

To handle this change in semantics, a few checks in some helpers were
added, like in commit 9c019e2bc4b2 ("bpf: change helper bpf_probe_read arg2
type to ARG_CONST_SIZE_OR_ZERO"), and those checks are less than ideal
because once they make it into a released kernel bpf programs can start
relying on them, preventing the possibility of being removed later on.

This patch tries to fix the issue by introducing a new argument type
ARG_PTR_TO_MEM_OR_NULL that can be used for helpers that can receive a
<NULL, 0> tuple. By doing so, we can fix the semantics of the other helpers
that don't need <NULL, 0> and can just handle <!NULL, 0>, allowing the code
to get rid of those checks.

Gianluca Borello (4):
  bpf: introduce ARG_PTR_TO_MEM_OR_NULL
  bpf: remove explicit handling of 0 for arg2 in bpf_probe_read
  bpf: change bpf_probe_read_str arg2 type to ARG_CONST_SIZE_OR_ZERO
  bpf: change bpf_perf_event_output arg5 type to ARG_CONST_SIZE_OR_ZERO

 include/linux/bpf.h                         |   1 +
 kernel/bpf/verifier.c                       |   4 +-
 kernel/trace/bpf_trace.c                    |  12 +--
 net/core/filter.c                           |   4 +-
 tools/testing/selftests/bpf/test_verifier.c | 113 ++++++++++++++++++++++++++--
 5 files changed, 116 insertions(+), 18 deletions(-)

--
2.14.1

Comments

Daniel Borkmann Nov. 22, 2017, 10:04 p.m. UTC | #1
On 11/22/2017 07:32 PM, Gianluca Borello wrote:
> This set includes some fixes in semantics and usability issues that emerged
> recently, and would be good to have them in net before the next release.
> 
> In particular, ARG_CONST_SIZE_OR_ZERO semantics was recently changed in
> commit 9fd29c08e520 ("bpf: improve verifier ARG_CONST_SIZE_OR_ZERO
> semantics") with the goal of letting the compiler generate simpler code
> that the verifier can more easily accept.
> 
> To handle this change in semantics, a few checks in some helpers were
> added, like in commit 9c019e2bc4b2 ("bpf: change helper bpf_probe_read arg2
> type to ARG_CONST_SIZE_OR_ZERO"), and those checks are less than ideal
> because once they make it into a released kernel bpf programs can start
> relying on them, preventing the possibility of being removed later on.
> 
> This patch tries to fix the issue by introducing a new argument type
> ARG_PTR_TO_MEM_OR_NULL that can be used for helpers that can receive a
> <NULL, 0> tuple. By doing so, we can fix the semantics of the other helpers
> that don't need <NULL, 0> and can just handle <!NULL, 0>, allowing the code
> to get rid of those checks.

Series applied to bpf tree, thanks Gianluca!