diff options
Diffstat (limited to 'net/llc/llc_input.c')
-rw-r--r-- | net/llc/llc_input.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/net/llc/llc_input.c b/net/llc/llc_input.c index 60c1acac7c97..789eec426451 100644 --- a/net/llc/llc_input.c +++ b/net/llc/llc_input.c | |||
@@ -166,17 +166,22 @@ int llc_rcv(struct sk_buff *skb, struct net_device *dev, | |||
166 | */ | 166 | */ |
167 | if (sap->rcv_func) { | 167 | if (sap->rcv_func) { |
168 | sap->rcv_func(skb, dev, pt, orig_dev); | 168 | sap->rcv_func(skb, dev, pt, orig_dev); |
169 | goto out; | 169 | goto out_put; |
170 | } | 170 | } |
171 | dest = llc_pdu_type(skb); | 171 | dest = llc_pdu_type(skb); |
172 | if (unlikely(!dest || !llc_type_handlers[dest - 1])) | 172 | if (unlikely(!dest || !llc_type_handlers[dest - 1])) |
173 | goto drop; | 173 | goto drop_put; |
174 | llc_type_handlers[dest - 1](sap, skb); | 174 | llc_type_handlers[dest - 1](sap, skb); |
175 | out_put: | ||
176 | llc_sap_put(sap); | ||
175 | out: | 177 | out: |
176 | return 0; | 178 | return 0; |
177 | drop: | 179 | drop: |
178 | kfree_skb(skb); | 180 | kfree_skb(skb); |
179 | goto out; | 181 | goto out; |
182 | drop_put: | ||
183 | kfree_skb(skb); | ||
184 | goto out_put; | ||
180 | handle_station: | 185 | handle_station: |
181 | if (!llc_station_handler) | 186 | if (!llc_station_handler) |
182 | goto drop; | 187 | goto drop; |