Commit 7c64b9f3f584008000cf3b960f25cd6a68fce191
Committed by
David S. Miller
1 parent
926e61b7c4
Exists in
master
and in
39 other branches
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
net/sched/sch_api.c
... | ... | @@ -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; |