Blob Blame History Raw
From: Stanislav Fomichev <sdf@google.com>
Date: Tue, 16 Jun 2020 18:04:16 -0700
Subject: bpf: Document optval > PAGE_SIZE behavior for sockopt hooks
Patch-mainline: v5.8-rc3
Git-commit: 8030e250d882db174cbcd88273570ffb36a13080
References: bsc#1155518

Extend existing doc with more details about requiring ctx->optlen = 0
for handling optval > PAGE_SIZE.

Signed-off-by: Stanislav Fomichev <sdf@google.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Link: https://lore.kernel.org/bpf/20200617010416.93086-3-sdf@google.com
Acked-by: Gary Lin <glin@suse.com>
---
 Documentation/bpf/prog_cgroup_sockopt.rst |   14 ++++++++++++++
 1 file changed, 14 insertions(+)

--- a/Documentation/bpf/prog_cgroup_sockopt.rst
+++ b/Documentation/bpf/prog_cgroup_sockopt.rst
@@ -86,6 +86,20 @@ then the next program in the chain (A) w
 *not* the original input ``setsockopt`` arguments. The potentially
 modified values will be then passed down to the kernel.
 
+Large optval
+============
+When the ``optval`` is greater than the ``PAGE_SIZE``, the BPF program
+can access only the first ``PAGE_SIZE`` of that data. So it has to options:
+
+* Set ``optlen`` to zero, which indicates that the kernel should
+  use the original buffer from the userspace. Any modifications
+  done by the BPF program to the ``optval`` are ignored.
+* Set ``optlen`` to the value less than ``PAGE_SIZE``, which
+  indicates that the kernel should use BPF's trimmed ``optval``.
+
+When the BPF program returns with the ``optlen`` greater than
+``PAGE_SIZE``, the userspace will receive ``EFAULT`` errno.
+
 Example
 =======