diff --git a/net/atm/signaling.c b/net/atm/signaling.c index 262f9aeb90d874587fc74a31ced2a21b31476085..0ecb4a4f66d0e384e1ef9d5c218c01280dc73434 100644 --- a/net/atm/signaling.c +++ b/net/atm/signaling.c @@ -136,6 +136,7 @@ static int sigd_send(struct atm_vcc *vcc,struct sk_buff *skb) if (vcc->sk->sk_ack_backlog == vcc->sk->sk_max_ack_backlog) { sigd_enq(NULL,as_reject,vcc,NULL,NULL); + dev_kfree_skb(skb); goto as_indicate_complete; } vcc->sk->sk_ack_backlog++; @@ -148,7 +149,7 @@ static int sigd_send(struct atm_vcc *vcc,struct sk_buff *skb) case as_close: set_bit(ATM_VF_RELEASED,&vcc->flags); vcc_release_async(vcc, msg->reply); - break; + goto out; case as_modify: modify_qos(vcc,msg); break; @@ -163,6 +164,7 @@ static int sigd_send(struct atm_vcc *vcc,struct sk_buff *skb) return -EINVAL; } vcc->sk->sk_state_change(vcc->sk); +out: dev_kfree_skb(skb); return 0; }