Commit cb09de45 authored by Thomas Graf's avatar Thomas Graf Committed by Greg Kroah-Hartman

sch_prio: Fix nla_parse_nested_compat() regression

[ No upstream commit, this is fixing code no longer in 2.6.27 ]

nla_parse_nested_compat() was used to parse two different message
formats in the netem and prio qdisc, when it was "fixed" to work
with netem, it broke the multi queue support in the prio qdisc.
Since the prio qdisc code in question is already removed in the
development tree, this patch only fixes the regression in the
stable tree.

Based on original patch from Alexander H Duyck <alexander.h.duyck@intel.com>
Signed-off-by: default avatarThomas Graf <tgraf@suug.ch>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent e2ab3da3
...@@ -228,14 +228,20 @@ static int prio_tune(struct Qdisc *sch, struct nlattr *opt) ...@@ -228,14 +228,20 @@ static int prio_tune(struct Qdisc *sch, struct nlattr *opt)
{ {
struct prio_sched_data *q = qdisc_priv(sch); struct prio_sched_data *q = qdisc_priv(sch);
struct tc_prio_qopt *qopt; struct tc_prio_qopt *qopt;
struct nlattr *tb[TCA_PRIO_MAX + 1]; struct nlattr *tb[TCA_PRIO_MAX + 1] = {0};
int err; int err;
int i; int i;
err = nla_parse_nested_compat(tb, TCA_PRIO_MAX, opt, NULL, qopt, qopt = nla_data(opt);
sizeof(*qopt)); if (nla_len(opt) < sizeof(*qopt))
return -1;
if (nla_len(opt) >= sizeof(*qopt) + sizeof(struct nlattr)) {
err = nla_parse_nested(tb, TCA_PRIO_MAX,
(struct nlattr *) (qopt + 1), NULL);
if (err < 0) if (err < 0)
return err; return err;
}
q->bands = qopt->bands; q->bands = qopt->bands;
/* If we're multiqueue, make sure the number of incoming bands /* If we're multiqueue, make sure the number of incoming bands
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment