Commit 7c64b9f3f584008000cf3b960f25cd6a68fce191

Authored by Jarek Poplawski
Committed by David S. Miller
1 parent 926e61b7c4

pkt_sched: Fix qdisc_create on stab error handling

If qdisc_get_stab returns error in qdisc_create there is skipped qdisc
ops->destroy, which is necessary because it's after ops->init at the
moment, so memory leaks are quite probable.

Signed-off-by: Jarek Poplawski <jarkao2@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>

Showing 1 changed file with 2 additions and 2 deletions Side-by-side Diff

... ... @@ -809,7 +809,7 @@
809 809 stab = qdisc_get_stab(tca[TCA_STAB]);
810 810 if (IS_ERR(stab)) {
811 811 err = PTR_ERR(stab);
812   - goto err_out3;
  812 + goto err_out4;
813 813 }
814 814 sch->stab = stab;
815 815 }
... ... @@ -838,7 +838,6 @@
838 838 return sch;
839 839 }
840 840 err_out3:
841   - qdisc_put_stab(sch->stab);
842 841 dev_put(dev);
843 842 kfree((char *) sch - sch->padded);
844 843 err_out2:
... ... @@ -852,6 +851,7 @@
852 851 * Any broken qdiscs that would require a ops->reset() here?
853 852 * The qdisc was never in action so it shouldn't be necessary.
854 853 */
  854 + qdisc_put_stab(sch->stab);
855 855 if (ops->destroy)
856 856 ops->destroy(sch);
857 857 goto err_out3;