From patchwork Wed Jan 16 14:24:58 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jian-Hong Pan X-Patchwork-Id: 1025968 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=g.ncu.edu.tw Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=g.ncu.edu.tw header.i=@g.ncu.edu.tw header.b="Pvnpn+he"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43fqJH6T9jz9sBQ for ; Thu, 17 Jan 2019 01:26:07 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2393387AbfAPO0D (ORCPT ); Wed, 16 Jan 2019 09:26:03 -0500 Received: from mail-pf1-f194.google.com ([209.85.210.194]:44836 "EHLO mail-pf1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2390992AbfAPO0D (ORCPT ); Wed, 16 Jan 2019 09:26:03 -0500 Received: by mail-pf1-f194.google.com with SMTP id u6so3131910pfh.11 for ; Wed, 16 Jan 2019 06:26:02 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=g.ncu.edu.tw; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=OFYi0B0xaMyvevGQpx6Nyn5JWeEzLpCt1jdHdRE25uY=; b=Pvnpn+heih5+7CDHMgICaTLHo1866UMg7a46Nfq+olAo/Avf8jw69IGFS93WQGSmQx Ooko3VxNfjFdX2uu4kE3t1SObzeYughNhUFtGu5n5GC+gEM3tKkjxc7J8xmkwplrtGSE P0AfBlcXuJQW2mZ3HKAGCKaEnCf9E8/902uDI= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=OFYi0B0xaMyvevGQpx6Nyn5JWeEzLpCt1jdHdRE25uY=; b=YFXDPNXkr3dEzW/x99r5BTfwQ+II4HtKPSVatHpu6TvW3raokUWtI2Tcvb1GXCy1+r SmsT7Lh9UmqeOaWXxMbCh5mMBb05/9/1pp/3TVZ5slAmGBO4ySGQZTuQ3I7ZUg3MwqBA iGWgh6rLq1qMKqlYqjTua++P3lNEwymqKpzUZrgOLSf/CniZ3A9dNRbVSHNzcG5Ei6iG 2SS2lVxIzJrOAaXTDaunbnKIpd5hoz7Trs44QLEVc7VLJhrhMDgG06QDW9r2Rl+kcBe8 vaOI8ea/q+EgJYWmXtAoNzgdC1kJK5iJiN3mwodYgK7P77eHtZx2CXHrXuXplcA/SrM1 lRkA== X-Gm-Message-State: AJcUukcaKB21zyBnaMRhS7UzQCUzwFyPLHSiToypXVk+jz2XsGGqXkGr 3VMQBV7SmMKvUSt/yqC65VRNnPrrHi9GvA== X-Google-Smtp-Source: ALg8bN74EQAx6xaPCby36H5blYZySCEw6xY6RY8NbQmY1fCiJjZYABituDk5LtY49qbnKuCuBtqYUQ== X-Received: by 2002:a63:a064:: with SMTP id u36mr9143400pgn.145.1547648762037; Wed, 16 Jan 2019 06:26:02 -0800 (PST) Received: from starnight.local ([150.116.255.181]) by smtp.gmail.com with ESMTPSA id a17sm9211783pgm.26.2019.01.16.06.26.00 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 16 Jan 2019 06:26:01 -0800 (PST) From: Jian-Hong Pan To: =?utf-8?q?Andreas_F=C3=A4rber?= Cc: Ben Whitten , linux-lpwan@lists.infradead.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Jian-Hong Pan Subject: [RFC PATCH 3/5] net; lorawan: Fix net device leakage Date: Wed, 16 Jan 2019 22:24:58 +0800 Message-Id: <20190116142458.19542-3-starnight@g.ncu.edu.tw> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190116142048.19446-1-starnight@g.ncu.edu.tw> References: <20190116142048.19446-1-starnight@g.ncu.edu.tw> MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org The net device may be missed to be put after error check. This patch fixes the issue to prevent the leakage. Signed-off-by: Jian-Hong Pan --- net/lorawan/socket.c | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/net/lorawan/socket.c b/net/lorawan/socket.c index 9c0722379e25..7139fab63159 100644 --- a/net/lorawan/socket.c +++ b/net/lorawan/socket.c @@ -51,8 +51,10 @@ lrw_get_dev_by_addr(struct net *net, u32 devaddr) rcu_read_lock(); ndev = dev_getbyhwaddr_rcu(net, ARPHRD_LORAWAN, (char *)&be_addr); - if (ndev) + if (ndev && ndev->type == ARPHRD_LORAWAN) dev_hold(ndev); + else + ndev = NULL; rcu_read_unlock(); return ndev; @@ -99,11 +101,6 @@ dgram_bind(struct sock *sk, struct sockaddr *uaddr, int len) } netdev_dbg(ndev, "%s: get ndev\n", __func__); - if (ndev->type != ARPHRD_LORAWAN) { - ret = -ENODEV; - goto dgram_bind_end; - } - ro->src_devaddr = addr->addr_in.devaddr; ro->bound = 1; ret = 0; @@ -152,7 +149,7 @@ dgram_sendmsg(struct sock *sk, struct msghdr *msg, size_t size) if (size > ndev->mtu) { netdev_dbg(ndev, "size = %zu, mtu = %u\n", size, ndev->mtu); ret = -EMSGSIZE; - goto dgram_sendmsg_end; + goto dgram_sendmsg_no_skb; } netdev_dbg(ndev, "%s: create skb\n", __func__); @@ -189,7 +186,6 @@ dgram_sendmsg(struct sock *sk, struct msghdr *msg, size_t size) kfree_skb(skb); dgram_sendmsg_no_skb: dev_put(ndev); - dgram_sendmsg_end: return ret; }