: Sock leak on error path in irda_create.
Subsystems (2)
PATCH 1/1 : Sock leak on error path in irda_create.
Bad type/protocol specified result in sk leak.
Fix is simple - release the sk if bad values are given, but to make it possible just to call sk_free(), I move some sk initialization a bit lower.
Signed-off-by Pavel Emelyanov <[email protected]>
---
net/irda/af_irda.c +7 -5
@@ -1093,11 +1093,6 @@ static int irda_create(struct net *net, struct socket *sock, int protocol)init_waitqueue_head (&self->query_wait); -/* Initialise networking socket struct */ -sock_init_data (sock, sk);/* Note : set sk->sk_refcnt to 1 */ - sk->sk_family =PF_IRDA ; - sk->sk_protocol = protocol; -switch (sock->type) {case SOCK_STREAM : sock->ops = &irda_stream_ops;
@@ -1124,13 +1119,20 @@ static int irda_create(struct net *net, struct socket *sock, int protocol) self->max_sdu_size_rx =TTP_SAR_UNBOUND ;break ;default : +sk_free (sk);return -ESOCKTNOSUPPORT ; }break ;default : +sk_free (sk);return -ESOCKTNOSUPPORT ; } +/* Initialise networking socket struct */ +sock_init_data (sock, sk);/* Note : set sk->sk_refcnt to 1 */ + sk->sk_family =PF_IRDA ; + sk->sk_protocol = protocol; +/* Register as a client with IrLMP */ self->ckey =irlmp_register_client (0 ,NULL ,NULL ,NULL ); self->mask.word =0xffff ;
From: Pavel Emelyanov <[email protected]>
Date: Thu, 15 May 2008 21:58:41 +0400
Quoted 7 lines
Bad type/protocol specified result in sk leak.
Fix is simple - release the sk if bad values are given, but to make it possible just to call
sk_free(), I move some sk initialization a bit lower.Signed-off-by Pavel Emelyanov <[email protected]>
Applied, thanks Pavel.