21 May, 2019

1 commit

  • Add SPDX license identifiers to all files which:

    - Have no license information of any form

    - Have EXPORT_.*_SYMBOL_GPL inside which was used in the
    initial scan/conversion to ignore the file

    These files fall under the project license, GPL v2 only. The resulting SPDX
    license identifier is:

    GPL-2.0-only

    Signed-off-by: Thomas Gleixner
    Signed-off-by: Greg Kroah-Hartman

    Thomas Gleixner
     

29 Apr, 2018

1 commit

  • When helpers like bpf_get_stack returns an int value
    and later on used for arithmetic computation, the LSH and ARSH
    operations are often required to get proper sign extension into
    64-bit. For example, without this patch:
    54: R0=inv(id=0,umax_value=800)
    54: (bf) r8 = r0
    55: R0=inv(id=0,umax_value=800) R8_w=inv(id=0,umax_value=800)
    55: (67) r8 <>= 32
    57: R8=inv(id=0)
    With this patch:
    54: R0=inv(id=0,umax_value=800)
    54: (bf) r8 = r0
    55: R0=inv(id=0,umax_value=800) R8_w=inv(id=0,umax_value=800)
    55: (67) r8 <>= 32
    57: R8=inv(id=0, umax_value=800,var_off=(0x0; 0x3ff))
    With better range of "R8", later on when "R8" is added to other register,
    e.g., a map pointer or scalar-value register, the better register
    range can be derived and verifier failure may be avoided.

    In our later example,
    ......
    usize = bpf_get_stack(ctx, raw_data, max_len, BPF_F_USER_STACK);
    if (usize < 0)
    return 0;
    ksize = bpf_get_stack(ctx, raw_data + usize, max_len - usize, 0);
    ......
    Without improving ARSH value range tracking, the register representing
    "max_len - usize" will have smin_value equal to S64_MIN and will be
    rejected by verifier.

    Acked-by: Alexei Starovoitov
    Signed-off-by: Yonghong Song
    Signed-off-by: Alexei Starovoitov

    Yonghong Song
     

09 Aug, 2017

2 commits

  • Allows us to, sometimes, combine information from a signed check of one
    bound and an unsigned check of the other.
    We now track the full range of possible values, rather than restricting
    ourselves to [0, 1<
    Signed-off-by: David S. Miller

    Edward Cree
     
  • Unifies adjusted and unadjusted register value types (e.g. FRAME_POINTER is
    now just a PTR_TO_STACK with zero offset).
    Tracks value alignment by means of tracking known & unknown bits. This
    also replaces the 'reg->imm' (leading zero bits) calculations for (what
    were) UNKNOWN_VALUEs.
    If pointer leaks are allowed, and adjust_ptr_min_max_vals returns -EACCES,
    treat the pointer as an unknown scalar and try again, because we might be
    able to conclude something about the result (e.g. pointer & 0x40 is either
    0 or 0x40).
    Verifier hooks in the netronome/nfp driver were changed to match the new
    data structures.

    Signed-off-by: Edward Cree
    Signed-off-by: David S. Miller

    Edward Cree