• Kumar Kartikeya Dwivedi's avatar
    bpf: Populate field_offs for inner_map_meta · f73e601a
    Kumar Kartikeya Dwivedi authored
    Far too much code simply assumes that both btf_record and btf_field_offs
    are set to valid pointers together, or both are unset. They go together
    hand in hand as btf_record describes the special fields and
    btf_field_offs is compact representation for runtime copying/zeroing.
    
    It is very difficult to make this clear in the code when the only
    exception to this universal invariant is inner_map_meta which is used
    as reg->map_ptr in the verifier. This is simply a bug waiting to happen,
    as in verifier context we cannot easily distinguish if PTR_TO_MAP_VALUE
    is coming from an inner map, and if we ever end up using field_offs for
    any reason in the future, we will silently ignore the special fields for
    inner map case (as NULL is not an error but unset field_offs).
    
    Hence, simply copy field_offs from inner map together with btf_record.
    
    While at it, refactor code to unwind properly on errors with gotos.
    Signed-off-by: default avatarKumar Kartikeya Dwivedi <memxor@gmail.com>
    Link: https://lore.kernel.org/r/20221118015614.2013203-5-memxor@gmail.comSigned-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
    f73e601a
map_in_map.c 3.71 KB