• Yonghong Song's avatar
    bpf: set inner_map_meta->spin_lock_off correctly · a115d0ed
    Yonghong Song authored
    Commit d83525ca ("bpf: introduce bpf_spin_lock")
    introduced bpf_spin_lock and the field spin_lock_off
    in kernel internal structure bpf_map has the following
    meaning:
      >=0 valid offset, <0 error
    
    For every map created, the kernel will ensure
    spin_lock_off has correct value.
    
    Currently, bpf_map->spin_lock_off is not copied
    from the inner map to the map_in_map inner_map_meta
    during a map_in_map type map creation, so
    inner_map_meta->spin_lock_off = 0.
    This will give verifier wrong information that
    inner_map has bpf_spin_lock and the bpf_spin_lock
    is defined at offset 0. An access to offset 0
    of a value pointer will trigger the following error:
       bpf_spin_lock cannot be accessed directly by load/store
    
    This patch fixed the issue by copy inner map's spin_lock_off
    value to inner_map_meta->spin_lock_off.
    
    Fixes: d83525ca ("bpf: introduce bpf_spin_lock")
    Signed-off-by: default avatarYonghong Song <yhs@fb.com>
    Acked-by: default avatarAndrii Nakryiko <andriin@fb.com>
    Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
    a115d0ed
map_in_map.c 3.15 KB