Message ID | 20230711210103.597831-2-pctammela@mojatatu.com (mailing list archive) |
---|---|
State | Accepted |
Commit | 158810b261d02fc7dd92ca9c392d8f8a211a2401 |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | net/sched: fixes for sch_qfq | expand |
On Tue, Jul 11, 2023 at 06:01:00PM -0300, Pedro Tammela wrote: > 25369891fcef deletes a check for the case where no 'lmax' is > specified which 3037933448f6 previously fixed as 'lmax' > could be set to the device's MTU without any bound checking > for QFQ_LMAX_MIN and QFQ_LMAX_MAX. Therefore, reintroduce the check. > > Fixes: 25369891fcef ("net/sched: sch_qfq: refactor parsing of netlink parameters") > Acked-by: Jamal Hadi Salim <jhs@mojatatu.com> > Reviewed-by: Eric Dumazet <edumazet@google.com> > Signed-off-by: Pedro Tammela <pctammela@mojatatu.com> Reviewed-by: Simon Horman <simon.horman@corigine.com>
diff --git a/net/sched/sch_qfq.c b/net/sched/sch_qfq.c index dfd9a99e6257..63a5b277c117 100644 --- a/net/sched/sch_qfq.c +++ b/net/sched/sch_qfq.c @@ -423,10 +423,17 @@ static int qfq_change_class(struct Qdisc *sch, u32 classid, u32 parentid, else weight = 1; - if (tb[TCA_QFQ_LMAX]) + if (tb[TCA_QFQ_LMAX]) { lmax = nla_get_u32(tb[TCA_QFQ_LMAX]); - else + } else { + /* MTU size is user controlled */ lmax = psched_mtu(qdisc_dev(sch)); + if (lmax < QFQ_MIN_LMAX || lmax > QFQ_MAX_LMAX) { + NL_SET_ERR_MSG_MOD(extack, + "MTU size out of bounds for qfq"); + return -EINVAL; + } + } inv_w = ONE_FP / weight; weight = ONE_FP / inv_w;