From: John Fastabend <john.r.fastabend@intel.com>
To: viro@ZenIV.linux.org.uk, nhorman@tuxdriver.com
Cc: netdev@vger.kernel.org, davem@davemloft.net,
linux-kernel@vger.kernel.org, joe@perches.com
Subject: [net PATCH v3 3/3] net: netprio: fix cgrp create and write priomap race
Date: Tue, 14 Aug 2012 15:34:35 -0700 [thread overview]
Message-ID: <20120814223435.3551.62387.stgit@jf-dev1-dcblab> (raw)
In-Reply-To: <20120814223424.3551.21608.stgit@jf-dev1-dcblab>
A race exists where creating cgroups and also updating the priomap
may result in losing a priomap update. This is because priomap
writers are not protected by rtnl_lock.
Move priority writer into rtnl_lock()/rtnl_unlock().
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 | 8 +++-----
1 files changed, 3 insertions(+), 5 deletions(-)
diff --git a/net/core/netprio_cgroup.c b/net/core/netprio_cgroup.c
index f65dba3..c75e3f9 100644
--- a/net/core/netprio_cgroup.c
+++ b/net/core/netprio_cgroup.c
@@ -101,12 +101,10 @@ static int write_update_netdev_table(struct net_device *dev)
u32 max_len;
struct netprio_map *map;
- rtnl_lock();
max_len = atomic_read(&max_prioidx) + 1;
map = rtnl_dereference(dev->priomap);
if (!map || map->priomap_len < max_len)
ret = extend_netdev_table(dev, max_len);
- rtnl_unlock();
return ret;
}
@@ -256,17 +254,17 @@ static int write_priomap(struct cgroup *cgrp, struct cftype *cft,
if (!dev)
goto out_free_devname;
+ rtnl_lock();
ret = write_update_netdev_table(dev);
if (ret < 0)
goto out_put_dev;
- rcu_read_lock();
- map = rcu_dereference(dev->priomap);
+ map = rtnl_dereference(dev->priomap);
if (map)
map->priomap[prioidx] = priority;
- rcu_read_unlock();
out_put_dev:
+ rtnl_unlock();
dev_put(dev);
out_free_devname:
next prev parent reply other threads:[~2012-08-14 22:50 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-08-14 22:34 [net PATCH v3 1/3] net: netprio: fix files lock and remove useless d_path bits John Fastabend
2012-08-14 22:34 ` [net PATCH v3 2/3] net: netprio: fd passed in SCM_RIGHTS datagram not set correctly John Fastabend
2012-08-15 10:53 ` Neil Horman
2012-08-16 22:11 ` David Miller
2012-08-14 22:34 ` John Fastabend [this message]
2012-08-15 10:56 ` [net PATCH v3 3/3] net: netprio: fix cgrp create and write priomap race Neil Horman
2012-08-16 22:11 ` David Miller
2012-08-15 10:52 ` [net PATCH v3 1/3] net: netprio: fix files lock and remove useless d_path bits Neil Horman
2012-08-15 20:03 ` Al Viro
2012-08-16 22:11 ` David Miller
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20120814223435.3551.62387.stgit@jf-dev1-dcblab \
--to=john.r.fastabend@intel.com \
--cc=davem@davemloft.net \
--cc=joe@perches.com \
--cc=linux-kernel@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=nhorman@tuxdriver.com \
--cc=viro@ZenIV.linux.org.uk \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.