Loading net/core/netprio_cgroup.c +11 −45 Original line number Diff line number Diff line Loading @@ -176,66 +176,32 @@ static int read_priomap(struct cgroup *cont, struct cftype *cft, static int write_priomap(struct cgroup *cgrp, struct cftype *cft, const char *buffer) { char *devname = kstrdup(buffer, GFP_KERNEL); int ret = -EINVAL; u32 prioidx = cgrp_netprio_state(cgrp)->prioidx; unsigned long priority; char *priostr; char devname[IFNAMSIZ + 1]; struct net_device *dev; struct netprio_map *map; u32 prio; int ret; if (!devname) return -ENOMEM; /* * Minimally sized valid priomap string */ if (strlen(devname) < 3) goto out_free_devname; priostr = strstr(devname, " "); if (!priostr) goto out_free_devname; /* *Separate the devname from the associated priority *and advance the priostr pointer to the priority value */ *priostr = '\0'; priostr++; /* * If the priostr points to NULL, we're at the end of the passed * in string, and its not a valid write */ if (*priostr == '\0') goto out_free_devname; ret = kstrtoul(priostr, 10, &priority); if (ret < 0) goto out_free_devname; ret = -ENODEV; if (sscanf(buffer, "%"__stringify(IFNAMSIZ)"s %u", devname, &prio) != 2) return -EINVAL; dev = dev_get_by_name(&init_net, devname); if (!dev) goto out_free_devname; return -ENODEV; rtnl_lock(); ret = write_update_netdev_table(dev); if (ret < 0) goto out_put_dev; if (ret) goto out_unlock; map = rtnl_dereference(dev->priomap); if (map) map->priomap[prioidx] = priority; out_put_dev: map->priomap[prioidx] = prio; out_unlock: rtnl_unlock(); dev_put(dev); out_free_devname: kfree(devname); return ret; } Loading Loading
net/core/netprio_cgroup.c +11 −45 Original line number Diff line number Diff line Loading @@ -176,66 +176,32 @@ static int read_priomap(struct cgroup *cont, struct cftype *cft, static int write_priomap(struct cgroup *cgrp, struct cftype *cft, const char *buffer) { char *devname = kstrdup(buffer, GFP_KERNEL); int ret = -EINVAL; u32 prioidx = cgrp_netprio_state(cgrp)->prioidx; unsigned long priority; char *priostr; char devname[IFNAMSIZ + 1]; struct net_device *dev; struct netprio_map *map; u32 prio; int ret; if (!devname) return -ENOMEM; /* * Minimally sized valid priomap string */ if (strlen(devname) < 3) goto out_free_devname; priostr = strstr(devname, " "); if (!priostr) goto out_free_devname; /* *Separate the devname from the associated priority *and advance the priostr pointer to the priority value */ *priostr = '\0'; priostr++; /* * If the priostr points to NULL, we're at the end of the passed * in string, and its not a valid write */ if (*priostr == '\0') goto out_free_devname; ret = kstrtoul(priostr, 10, &priority); if (ret < 0) goto out_free_devname; ret = -ENODEV; if (sscanf(buffer, "%"__stringify(IFNAMSIZ)"s %u", devname, &prio) != 2) return -EINVAL; dev = dev_get_by_name(&init_net, devname); if (!dev) goto out_free_devname; return -ENODEV; rtnl_lock(); ret = write_update_netdev_table(dev); if (ret < 0) goto out_put_dev; if (ret) goto out_unlock; map = rtnl_dereference(dev->priomap); if (map) map->priomap[prioidx] = priority; out_put_dev: map->priomap[prioidx] = prio; out_unlock: rtnl_unlock(); dev_put(dev); out_free_devname: kfree(devname); return ret; } Loading