From patchwork Thu Jan 31 16:28:09 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: 1034372 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="beQ1SY1T"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43r5Hv33kXz9sBb for ; Fri, 1 Feb 2019 03:27:55 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2388485AbfAaQ1y (ORCPT ); Thu, 31 Jan 2019 11:27:54 -0500 Received: from mail-pf1-f195.google.com ([209.85.210.195]:40088 "EHLO mail-pf1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731284AbfAaQ1y (ORCPT ); Thu, 31 Jan 2019 11:27:54 -0500 Received: by mail-pf1-f195.google.com with SMTP id i12so1697573pfo.7 for ; Thu, 31 Jan 2019 08:27:53 -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=3VOf6DLZYS99V3GpI3zvjWFvs4SNL8W1HPeziGjZb38=; b=beQ1SY1TkKH9Rk1tWxQkwgtFmFZCjJeIMxp1N4gAtU7ytSqEkQwBrvR6NcnjezP+oY 2W1h0lNN2ztvn64LAH0+UnnyYEMJe/nmyWAubldLqvt2jLRgkDfXjxaCY+9XzIAg7Mue bghlAu5LFkRq5NYfv97Et6SeSdrWeEdJyiyg0= 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=3VOf6DLZYS99V3GpI3zvjWFvs4SNL8W1HPeziGjZb38=; b=Q9woipiV90PEju5RU1wJQ+UmyvdJGKUq2WTrAZ7yF+AjykpAVGAWFfZiyiYpPGbYlg /l4K+8GCZ6mredPrnvKJSuqtxzDME+81TTw61E+OceiJ/eR8qH0bYM0He4UiyPVOF++2 qso1CQFVaZosOKY6yRLdl+Bssi0ZKoqXF4ctqEca/vkAfyujOMEYjkFEnF7L+al7N0KS P5RvdpuDryVWh/E8XLv5NwoNhVf7nQ09D3N+Rn62BiK+TS9iEqd58tbQxFyEwOSqYVne uDJkr9FUfPvQeiLaTI4wBo0quHs+lV/XExaxseBwS3mB2EsbkZV1T3dnQ13DE5E7+UoZ 4seA== X-Gm-Message-State: AJcUukcF/ayCred9qfkdCMztbp5ZOpfDFQuqOpQntMxtUO3X4FVCmBtE 2elbY9mK3iUYg0SuV/wXzGI8iQ== X-Google-Smtp-Source: ALg8bN6Q+PTVkbxpA29iP+CGUcOLldkRl8Gqudq0m8rzfL1/M3qTWKnKuvL/1xotJpWnvKt/vPX9WA== X-Received: by 2002:a65:534b:: with SMTP id w11mr32392498pgr.125.1548952072823; Thu, 31 Jan 2019 08:27:52 -0800 (PST) Received: from starnight.local ([150.116.255.181]) by smtp.gmail.com with ESMTPSA id 24sm30976557pfl.32.2019.01.31.08.27.51 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 31 Jan 2019 08:27:52 -0800 (PST) From: Jian-Hong Pan To: =?utf-8?q?Andreas_F=C3=A4rber?= Cc: netdev@vger.kernel.org, linux-lpwan@lists.infradead.org, Ben Whitten , Jian-Hong Pan Subject: [RFC PATCH v2 3/5] net: lorawan: Fix net device leakage Date: Fri, 1 Feb 2019 00:28:09 +0800 Message-Id: <20190131162809.18583-1-starnight@g.ncu.edu.tw> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190131162101.18386-1-starnight@g.ncu.edu.tw> References: <20190131162101.18386-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. Fixes: 48e5bb6cec79 ("net: Prepare LoRaWAN socket module") Signed-off-by: Jian-Hong Pan --- v2: - Modify the commit message 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 38cee1ff02af..c94dc0f3cf82 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; }