From patchwork Fri May 22 21:04:52 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Karsten Keil X-Patchwork-Id: 27546 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@bilbo.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from ozlabs.org (ozlabs.org [203.10.76.45]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client CN "mx.ozlabs.org", Issuer "CA Cert Signing Authority" (verified OK)) by bilbo.ozlabs.org (Postfix) with ESMTPS id 60ACFB6F34 for ; Sat, 23 May 2009 09:47:27 +1000 (EST) Received: by ozlabs.org (Postfix) id 4EE03DE1EA; Sat, 23 May 2009 09:47:27 +1000 (EST) Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.176.167]) by ozlabs.org (Postfix) with ESMTP id E4CBBDE1E8 for ; Sat, 23 May 2009 09:47:26 +1000 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1758112AbZEVXrT (ORCPT ); Fri, 22 May 2009 19:47:19 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1758036AbZEVXrS (ORCPT ); Fri, 22 May 2009 19:47:18 -0400 Received: from d112a2.x-mailer.de ([212.162.53.4]:43103 "EHLO d112a2.x-mailer.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1757800AbZEVXrR (ORCPT ); Fri, 22 May 2009 19:47:17 -0400 Received: from [84.151.215.214] (helo=pingi) by d112.x-mailer.de with esmtpa (Exim 4.63) (envelope-from ) id 1M7bvA-0001zV-Hb; Fri, 22 May 2009 23:04:52 +0200 Message-Id: <234a21433b574ede7ef52c07369c2adbfe111877.1243024967.git.kkeil@pingi.linux-pingi.de> In-Reply-To: References: Subject: [mISDN PATCH v2 12/19] Fix skb leak in error cases From: Karsten Keil To: linux-kernel@vger.kernel.org Cc: netdev@vger.kernel.org, David Miller , i4ldeveloper@listserv.isdn4linux.de Date: Fri, 22 May 2009 23:04:52 +0200 X-Info: valid message X-Info: original Date Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org If the channel receive function returns an error the skb must be freed. Signed-off-by: Karsten Keil --- drivers/isdn/mISDN/socket.c | 22 ++++++++++++---------- 1 files changed, 12 insertions(+), 10 deletions(-) diff --git a/drivers/isdn/mISDN/socket.c b/drivers/isdn/mISDN/socket.c index 530f689..2a2c30a 100644 --- a/drivers/isdn/mISDN/socket.c +++ b/drivers/isdn/mISDN/socket.c @@ -209,7 +209,7 @@ mISDN_sock_sendmsg(struct kiocb *iocb, struct socket *sock, if (memcpy_fromiovec(skb_put(skb, len), msg->msg_iov, len)) { err = -EFAULT; - goto drop; + goto done; } memcpy(mISDN_HEAD_P(skb), skb->data, MISDN_HEADER_LEN); @@ -230,19 +230,21 @@ mISDN_sock_sendmsg(struct kiocb *iocb, struct socket *sock, __func__, mISDN_HEAD_ID(skb)); err = -ENODEV; - if (!_pms(sk)->ch.peer || - (err = _pms(sk)->ch.recv(_pms(sk)->ch.peer, skb))) - goto drop; - - err = len; + if (!_pms(sk)->ch.peer) + goto done; + err = _pms(sk)->ch.recv(_pms(sk)->ch.peer, skb); + if (err) + goto done; + else { + skb = NULL; + err = len; + } done: + if (skb) + kfree_skb(skb); release_sock(sk); return err; - -drop: - kfree_skb(skb); - goto done; } static int