• YiFei Zhu's avatar
    bpf: Move getsockopt retval to struct bpf_cg_run_ctx · c4dcfdd4
    YiFei Zhu authored
    The retval value is moved to struct bpf_cg_run_ctx for ease of access
    in different prog types with different context structs layouts. The
    helper implementation (to be added in a later patch in the series) can
    simply perform a container_of from current->bpf_ctx to retrieve
    bpf_cg_run_ctx.
    
    Unfortunately, there is no easy way to access the current task_struct
    via the verifier BPF bytecode rewrite, aside from possibly calling a
    helper, so a pointer to current task is added to struct bpf_sockopt_kern
    so that the rewritten BPF bytecode can access struct bpf_cg_run_ctx with
    an indirection.
    
    For backward compatibility, if a getsockopt program rejects a syscall
    by returning 0, an -EPERM will be generated, by having the
    BPF_PROG_RUN_ARRAY_CG family macros automatically set the retval to
    -EPERM. Unlike prior to this patch, this -EPERM will be visible to
    ctx->retval for any other hooks down the line in the prog array.
    
    Additionally, the restriction that getsockopt filters can only set
    the retval to 0 is removed, considering that certain getsockopt
    implementations may return optlen. Filters are now able to set the
    value arbitrarily.
    Signed-off-by: default avatarYiFei Zhu <zhuyifei@google.com>
    Reviewed-by: default avatarStanislav Fomichev <sdf@google.com>
    Link: https://lore.kernel.org/r/73b0325f5c29912ccea7ea57ec1ed4d388fc1d37.1639619851.git.zhuyifei@google.comSigned-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
    c4dcfdd4
cgroup.c 53.6 KB