summaryrefslogtreecommitdiff
path: root/include/linux/slub_def.h
diff options
context:
space:
mode:
authorYiFei Zhu <zhuyifei@google.com>2021-12-16 05:04:27 +0300
committerAlexei Starovoitov <ast@kernel.org>2022-01-19 23:51:30 +0300
commitb44123b4a3dcad4664d3a0f72c011ffd4c9c4d93 (patch)
tree9cdcfa1df6f0a66dfff4acc93301f8def881566d /include/linux/slub_def.h
parentc4dcfdd406aa2167396ac215e351e5e4dfd7efe3 (diff)
downloadlinux-b44123b4a3dcad4664d3a0f72c011ffd4c9c4d93.tar.xz
bpf: Add cgroup helpers bpf_{get,set}_retval to get/set syscall return value
The helpers continue to use int for retval because all the hooks are int-returning rather than long-returning. The return value of bpf_set_retval is int for future-proofing, in case in the future there may be errors trying to set the retval. After the previous patch, if a program rejects a syscall by returning 0, an -EPERM will be generated no matter if the retval is already set to -err. This patch change it being forced only if retval is not -err. This is because we want to support, for example, invoking bpf_set_retval(-EINVAL) and return 0, and have the syscall return value be -EINVAL not -EPERM. For BPF_PROG_CGROUP_INET_EGRESS_RUN_ARRAY, the prior behavior is that, if the return value is NET_XMIT_DROP, the packet is silently dropped. We preserve this behavior for backward compatibility reasons, so even if an errno is set, the errno does not return to caller. However, setting a non-err to retval cannot propagate so this is not allowed and we return a -EFAULT in that case. Signed-off-by: YiFei Zhu <zhuyifei@google.com> Reviewed-by: Stanislav Fomichev <sdf@google.com> Link: https://lore.kernel.org/r/b4013fd5d16bed0b01977c1fafdeae12e1de61fb.1639619851.git.zhuyifei@google.com Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Diffstat (limited to 'include/linux/slub_def.h')
0 files changed, 0 insertions, 0 deletions