• Paul Chaignon's avatar
    bpf: allow map helpers access to map values directly · d71962f3
    Paul Chaignon authored
    Helpers that expect ARG_PTR_TO_MAP_KEY and ARG_PTR_TO_MAP_VALUE can only
    access stack and packet memory.  Allow these helpers to directly access
    map values by passing registers of type PTR_TO_MAP_VALUE.
    
    This change removes the need for an extra copy to the stack when using a
    map value to perform a second map lookup, as in the following:
    
    struct bpf_map_def SEC("maps") infobyreq = {
        .type = BPF_MAP_TYPE_HASHMAP,
        .key_size = sizeof(struct request *),
        .value_size = sizeof(struct info_t),
        .max_entries = 1024,
    };
    struct bpf_map_def SEC("maps") counts = {
        .type = BPF_MAP_TYPE_HASHMAP,
        .key_size = sizeof(struct info_t),
        .value_size = sizeof(u64),
        .max_entries = 1024,
    };
    SEC("kprobe/blk_account_io_start")
    int bpf_blk_account_io_start(struct pt_regs *ctx)
    {
        struct info_t *info = bpf_map_lookup_elem(&infobyreq, &ctx->di);
        u64 *count = bpf_map_lookup_elem(&counts, info);
        (*count)++;
    }
    Signed-off-by: default avatarPaul Chaignon <paul.chaignon@orange.com>
    Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
    d71962f3
verifier.c 167 KB