pkt_sched: Add some basic qdisc class ops verification. Was: [PATCH] sfq: add dummy bind/unbind handles
Subsystems (3)
PATCH 2/2 pkt_sched: Add some basic qdisc class ops verification. Was: [PATCH] sfq: add dummy bind/unbind handles
Verify in register_qdisc() some basic qdisc class handlers are present.
Signed-off-by Jarek Poplawski <[email protected]>
---
net/sched/sch_api.c +17 -5
@@ -150,22 +150,34 @@ int register_qdisc(struct Qdisc_ops *qops)if (qops->enqueue ==NULL ) qops->enqueue = noop_qdisc_ops.enqueue;if (qops->peek ==NULL ) { -if (qops->dequeue ==NULL ) { +if (qops->dequeue ==NULL ) qops->peek = noop_qdisc_ops.peek; - }else { - rc = -EINVAL ; - goto out; - } +else + goto out_einval; }if (qops->dequeue ==NULL ) qops->dequeue = noop_qdisc_ops.dequeue; +if (qops->cl_ops) { +const struct Qdisc_class_ops *cops = qops->cl_ops; + +if (!(cops->get && cops->put)) + goto out_einval; + +if (cops->tcf_chain && !(cops->bind_tcf && cops->unbind_tcf)) + goto out_einval; + } + qops->next =NULL ; *qp = qops; rc =0 ; out:write_unlock (&qdisc_mod_lock);return rc; + +out_einval: + rc = -EINVAL ; + goto out; }EXPORT_SYMBOL (register_qdisc);
From: Jarek Poplawski <[email protected]>
Date: Tue, 10 Aug 2010 00:18:48 +0200
Quoted 3 lines
Verify in
register_qdisc()some basic qdisc class handlers are present.Signed-off-by Jarek Poplawski <[email protected]>
Applied.