20 Nov, 2014

1 commit

  • - fix NULL pointer dereference:
    kernel/bpf/arraymap.c:41 array_map_alloc() error: potential null dereference 'array'. (kzalloc returns null)
    kernel/bpf/arraymap.c:41 array_map_alloc() error: we previously assumed 'array' could be null (see line 40)

    - integer overflow check was missing in arraymap
    (hashmap checks for overflow via kmalloc_array())

    - arraymap can round_up(value_size, 8) to zero. check was missing.

    - hashmap was missing zero size check as well, since roundup_pow_of_two() can
    truncate into zero

    - found a typo in the arraymap comment and unnecessary empty line

    Fix all of these issues and make both overflow checks explicit U32 in size.

    Reported-by: kbuild test robot
    Signed-off-by: Alexei Starovoitov
    Signed-off-by: David S. Miller

    Alexei Starovoitov
     

19 Nov, 2014

1 commit

  • add new map type BPF_MAP_TYPE_ARRAY and its implementation

    - optimized for fastest possible lookup()
    . in the future verifier/JIT may recognize lookup() with constant key
    and optimize it into constant pointer. Can optimize non-constant
    key into direct pointer arithmetic as well, since pointers and
    value_size are constant for the life of the eBPF program.
    In other words array_map_lookup_elem() may be 'inlined' by verifier/JIT
    while preserving concurrent access to this map from user space

    - two main use cases for array type:
    . 'global' eBPF variables: array of 1 element with key=0 and value is a
    collection of 'global' variables which programs can use to keep the state
    between events
    . aggregation of tracing events into fixed set of buckets

    - all array elements pre-allocated and zero initialized at init time

    - key as an index in array and can only be 4 byte

    - map_delete_elem() returns EINVAL, since elements cannot be deleted

    - map_update_elem() replaces elements in an non-atomic way
    (for atomic updates hashtable type should be used instead)

    Signed-off-by: Alexei Starovoitov
    Signed-off-by: David S. Miller

    Alexei Starovoitov