{
        struct fq_codel_sched_data *q = qdisc_priv(sch);
        struct nlattr *tb[TCA_FQ_CODEL_MAX + 1];
+       u32 quantum = 0;
        int err;
 
        if (!opt)
                    q->flows_cnt > 65536)
                        return -EINVAL;
        }
+       if (tb[TCA_FQ_CODEL_QUANTUM]) {
+               quantum = max(256U, nla_get_u32(tb[TCA_FQ_CODEL_QUANTUM]));
+               if (quantum > FQ_CODEL_QUANTUM_MAX) {
+                       NL_SET_ERR_MSG(extack, "Invalid quantum");
+                       return -EINVAL;
+               }
+       }
        sch_tree_lock(sch);
 
        if (tb[TCA_FQ_CODEL_TARGET]) {
        if (tb[TCA_FQ_CODEL_ECN])
                q->cparams.ecn = !!nla_get_u32(tb[TCA_FQ_CODEL_ECN]);
 
-       if (tb[TCA_FQ_CODEL_QUANTUM])
-               q->quantum = max(256U, nla_get_u32(tb[TCA_FQ_CODEL_QUANTUM]));
+       if (quantum)
+               q->quantum = quantum;
 
        if (tb[TCA_FQ_CODEL_DROP_BATCH_SIZE])
                q->drop_batch_size = max(1U, nla_get_u32(tb[TCA_FQ_CODEL_DROP_BATCH_SIZE]));