lkml.org 
[lkml]   [2017]   [Jun]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v3 net-next 05/12] bpf/verifier: more concise register state logs for constant var_off
    Date
    Signed-off-by: Edward Cree <ecree@solarflare.com>
    ---
    kernel/bpf/verifier.c | 46 +++++++++++++++++++++++++++-------------------
    1 file changed, 27 insertions(+), 19 deletions(-)

    diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c
    index d45c1d1..3e1df75 100644
    --- a/kernel/bpf/verifier.c
    +++ b/kernel/bpf/verifier.c
    @@ -234,25 +234,33 @@ static void print_verifier_state(struct bpf_verifier_state *state)
    verbose(",ks=%d,vs=%d",
    reg->map_ptr->key_size,
    reg->map_ptr->value_size);
    - if (reg->smin_value != reg->umin_value &&
    - reg->smin_value != S64_MIN)
    - verbose(",smin_value=%lld",
    - (long long)reg->smin_value);
    - if (reg->smax_value != reg->umax_value &&
    - reg->smax_value != S64_MAX)
    - verbose(",smax_value=%lld",
    - (long long)reg->smax_value);
    - if (reg->umin_value != 0)
    - verbose(",umin_value=%llu",
    - (unsigned long long)reg->umin_value);
    - if (reg->umax_value != U64_MAX)
    - verbose(",umax_value=%llu",
    - (unsigned long long)reg->umax_value);
    - if (!tnum_is_unknown(reg->var_off)) {
    - char tn_buf[48];
    -
    - tnum_strn(tn_buf, sizeof(tn_buf), reg->var_off);
    - verbose(",var_off=%s", tn_buf);
    + if (tnum_is_const(reg->var_off)) {
    + /* Typically an immediate SCALAR_VALUE, but
    + * could be a pointer whose offset is too big
    + * for reg->off
    + */
    + verbose(",imm=%llx", reg->var_off.value);
    + } else {
    + if (reg->smin_value != reg->umin_value &&
    + reg->smin_value != S64_MIN)
    + verbose(",smin_value=%lld",
    + (long long)reg->smin_value);
    + if (reg->smax_value != reg->umax_value &&
    + reg->smax_value != S64_MAX)
    + verbose(",smax_value=%lld",
    + (long long)reg->smax_value);
    + if (reg->umin_value != 0)
    + verbose(",umin_value=%llu",
    + (unsigned long long)reg->umin_value);
    + if (reg->umax_value != U64_MAX)
    + verbose(",umax_value=%llu",
    + (unsigned long long)reg->umax_value);
    + if (!tnum_is_unknown(reg->var_off)) {
    + char tn_buf[48];
    +
    + tnum_strn(tn_buf, sizeof(tn_buf), reg->var_off);
    + verbose(",var_off=%s", tn_buf);
    + }
    }
    verbose(")");
    }
    \
     
     \ /
      Last update: 2017-06-27 14:59    [W:4.113 / U:0.404 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site