Thread (53 messages) 53 messages, 9 authors, 2012-02-29

Re: [PATCH v11 06/12] seccomp: add system call filtering using BPF

From: Oleg Nesterov <oleg@redhat.com>
Date: 2012-02-27 17:17:40
Also in: linux-arch, lkml

Hello Will.

I missed the previous discussions, and I don't think I can read
all these emails now. So I apologize in advance if this was already
discussed.

On 02/24, Will Drewry wrote:
 struct seccomp {
 	int mode;
+	struct seccomp_filter *filter;
 };
Minor nit, it seems that the new member can be "ifdef CONFIG_SECCOMP_FILTER"
+static long seccomp_attach_filter(struct sock_fprog *fprog)
+{
+	struct seccomp_filter *filter;
+	unsigned long fp_size = fprog->len * sizeof(struct sock_filter);
+	long ret;
+
+	if (fprog->len == 0 || fprog->len > BPF_MAXINSNS)
+		return -EINVAL;
OK, this limits the memory PR_SET_SECCOMP can use.

But,
+	/*
+	 * If there is an existing filter, make it the prev and don't drop its
+	 * task reference.
+	 */
+	filter->prev = current->seccomp.filter;
+	current->seccomp.filter = filter;
+	return 0;
this doesn't limit the number of filters, looks like a DoS.

What if the application simply does prctl(PR_SET_SECCOMP, dummy_filter)
in an endless loop?


+static struct seccomp_filter *get_seccomp_filter(struct seccomp_filter *orig)
+{
+	if (!orig)
+		return NULL;
+	/* Reference count is bounded by the number of total processes. */
+	atomic_inc(&orig->usage);
+	return orig;
+}
...
+void copy_seccomp(struct seccomp *child, const struct seccomp *parent)
+{
+	/* Other fields are handled by dup_task_struct. */
+	child->filter = get_seccomp_filter(parent->filter);
+}
This is purely cosmetic, but imho looks a bit confusing.

We do not copy seccomp->mode and this is correct, it was already copied
implicitely. So why do we copy ->filter? This is not "symmetrical", afaics
you can simply do

	void copy_seccomp(struct seccomp *child)
	{
		if (child->filter)
			atomic_inc(child->filter->usage);

But once again, this is cosmetic, feel free to ignore.

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