Thread (36 messages) 36 messages, 4 authors, 2021-12-19

Re: [PATCH bpf-next v4 03/10] bpf: Extend kfunc with PTR_TO_CTX, PTR_TO_MEM argument support

From: Kumar Kartikeya Dwivedi <memxor@gmail.com>
Date: 2021-12-19 03:21:34
Also in: bpf, netfilter-devel

On Sun, Dec 19, 2021 at 07:47:22AM IST, Alexei Starovoitov wrote:
On Fri, Dec 17, 2021 at 07:20:24AM +0530, Kumar Kartikeya Dwivedi wrote:
quoted
+/* Returns true if struct is composed of scalars, 4 levels of nesting allowed */
+static bool __btf_type_is_scalar_struct(struct bpf_verifier_log *log,
+					const struct btf *btf,
+					const struct btf_type *t, int rec)
+{
+	const struct btf_type *member_type;
+	const struct btf_member *member;
+	u16 i;
+
+	if (rec == 4) {
+		bpf_log(log, "max struct nesting depth 4 exceeded\n");
+		return false;
+	}
As Matteo found out that saves stack with gcc only,
so I moved this check few lines below, just before recursive call.
quoted
+			if (is_kfunc) {
+				/* Permit pointer to mem, but only when argument
+				 * type is pointer to scalar, or struct composed
+				 * (recursively) of scalars.
+				 */
+				if (!btf_type_is_scalar(ref_t) && !__btf_type_is_scalar_struct(log, btf, ref_t, 0)) {
... and reformatted this line to fit screen width.

... and applied.
Thanks.
Please add individual selftest for this feature
(not tied into refcnted kfuncs and CT).
Ok, I'll add more in v5, but the second one in calls.c in patch 10/10 does check
it.

--
Kartikeya
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help