All of lore.kernel.org
 help / color / mirror / Atom feed
* [net PATCH v2 1/2] net: netprio: fix files lock and remove useless d_path bits
@ 2012-08-14  2:43 John Fastabend
  2012-08-14  2:43 ` [net PATCH v2 2/2] net: netprio: fd passed in SCM_RIGHTS datagram not set correctly John Fastabend
  2012-08-14 12:56 ` [net PATCH v2 1/2] net: netprio: fix files lock and remove useless d_path bits Neil Horman
  0 siblings, 2 replies; 5+ messages in thread
From: John Fastabend @ 2012-08-14  2:43 UTC (permalink / raw)
  To: viro, nhorman; +Cc: netdev, davem, linux-kernel, joe

Add lock to prevent a race with a file closing and also remove
useless and ugly sscanf code. The extra code was never needed
and the case it supposedly protected against is in fact handled
correctly by sock_from_file as pointed out by Al Viro.

CC: Neil Horman <nhorman@tuxdriver.com>
Reported-by: Al Viro <viro@ZenIV.linux.org.uk>
Signed-off-by: John Fastabend <john.r.fastabend@intel.com>
---

 net/core/netprio_cgroup.c |   22 ++++------------------
 1 files changed, 4 insertions(+), 18 deletions(-)

diff --git a/net/core/netprio_cgroup.c b/net/core/netprio_cgroup.c
index ed0c043..f65dba3 100644
--- a/net/core/netprio_cgroup.c
+++ b/net/core/netprio_cgroup.c
@@ -277,12 +277,6 @@ out_free_devname:
 void net_prio_attach(struct cgroup *cgrp, struct cgroup_taskset *tset)
 {
 	struct task_struct *p;
-	char *tmp = kzalloc(sizeof(char) * PATH_MAX, GFP_KERNEL);
-
-	if (!tmp) {
-		pr_warn("Unable to attach cgrp due to alloc failure!\n");
-		return;
-	}
 
 	cgroup_taskset_for_each(p, cgrp, tset) {
 		unsigned int fd;
@@ -296,32 +290,24 @@ void net_prio_attach(struct cgroup *cgrp, struct cgroup_taskset *tset)
 			continue;
 		}
 
-		rcu_read_lock();
+		spin_lock(&files->file_lock);
 		fdt = files_fdtable(files);
 		for (fd = 0; fd < fdt->max_fds; fd++) {
-			char *path;
 			struct file *file;
 			struct socket *sock;
-			unsigned long s;
-			int rv, err = 0;
+			int err;
 
 			file = fcheck_files(files, fd);
 			if (!file)
 				continue;
 
-			path = d_path(&file->f_path, tmp, PAGE_SIZE);
-			rv = sscanf(path, "socket:[%lu]", &s);
-			if (rv <= 0)
-				continue;
-
 			sock = sock_from_file(file, &err);
-			if (!err)
+			if (sock)
 				sock_update_netprioidx(sock->sk, p);
 		}
-		rcu_read_unlock();
+		spin_unlock(&files->file_lock);
 		task_unlock(p);
 	}
-	kfree(tmp);
 }
 
 static struct cftype ss_files[] = {


^ permalink raw reply related	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2012-08-14 14:35 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-08-14  2:43 [net PATCH v2 1/2] net: netprio: fix files lock and remove useless d_path bits John Fastabend
2012-08-14  2:43 ` [net PATCH v2 2/2] net: netprio: fd passed in SCM_RIGHTS datagram not set correctly John Fastabend
2012-08-14 12:55   ` Neil Horman
2012-08-14 14:35     ` John Fastabend
2012-08-14 12:56 ` [net PATCH v2 1/2] net: netprio: fix files lock and remove useless d_path bits Neil Horman

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.