From patchwork Fri Apr 22 05:27:32 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 613383 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3qrkf24blxz9syq for ; Fri, 22 Apr 2016 15:27:38 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b=bucvsL6n; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752211AbcDVF1g (ORCPT ); Fri, 22 Apr 2016 01:27:36 -0400 Received: from mail-vk0-f54.google.com ([209.85.213.54]:33751 "EHLO mail-vk0-f54.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751554AbcDVF1f (ORCPT ); Fri, 22 Apr 2016 01:27:35 -0400 Received: by mail-vk0-f54.google.com with SMTP id n62so123611617vkb.0 for ; Thu, 21 Apr 2016 22:27:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=message-id:subject:from:to:cc:date:mime-version :content-transfer-encoding; bh=g4chaA8uWbhC7kP62ajmdLvKoSoxENxT5WcTcz8TGx4=; b=bucvsL6n6Vn6azH0z7nNp//3fJvcaytg9kVvU0i2y5B6bbHiOm+LysOwtX0Pa06zth Hb2gybgAAS35DfmrKTIkgCSPqsMZ9ommCk2jmjS+DCAyFus+WDWTpbT9SjH9B7uUgqGQ jmMwAhXsZeulRld5U1t30WjLa9vDCKF/RhrFzv88NtX89kQ2XSkkUZQ+dwDhQ5sG9ejl DpBznG3vcu7fdCPmoE1x0iYM0m1vjN1Njqv4WqkSIyXGP+ZOTgXqFuA1m4DnT3zRGX1o 7CtU5CvVyJcBmJ2B90cC3owtTDeqhrfjlfZb1DrDa3ODmaLWZCCiX2/Du0V8A5UIAE5j ELUQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:message-id:subject:from:to:cc:date:mime-version :content-transfer-encoding; bh=g4chaA8uWbhC7kP62ajmdLvKoSoxENxT5WcTcz8TGx4=; b=Q11UkqW4eoQozPZsNJAGc8ukuu/EjsHNirD633hcQNyAntWB4eXCXxofJamQLTEBk/ vCPvFTZGoPJym1fHqMVPvLWHgk3UZ7YOUaTeXkLQXvc7fnuYdvO4YCevn6waKPc8b0mx tO7LAECnaq4WH1n6Ghc8fmGNE8FXGg+GNvhdY7gR25P7k1zf7ET6bF8FWLcwrgBxxUwz L1njqOhjXLU0Ph4Viuaue/Ji/NLJFyXL7HPwDfAqtpQLR6Pqhzt5twfOBY6WcjpnS/le GMKy844uQxug76wPK8gW9tH4u28IXSl6S5UbZPmtCIe/2yU6ljri+ox4ltnLqnMSjqPG Og+w== X-Gm-Message-State: AOPr4FXDHJw8jSADgg3OeNN21MMU50Ww9IPMouSGly2zNkzEBe/tEWDnBMBA1WXz3y5mug== X-Received: by 10.176.64.169 with SMTP id i38mr8700870uad.154.1461302854595; Thu, 21 Apr 2016 22:27:34 -0700 (PDT) Received: from [100.96.105.42] ([100.96.105.42]) by smtp.googlemail.com with ESMTPSA id j35sm806580uad.19.2016.04.21.22.27.33 (version=TLSv1/SSLv3 cipher=OTHER); Thu, 21 Apr 2016 22:27:34 -0700 (PDT) Message-ID: <1461302852.7627.29.camel@edumazet-glaptop3.roam.corp.google.com> Subject: [PATCH net-next] net: better drop monitoring in ip{6}_recv_error() From: Eric Dumazet To: David Miller Cc: netdev Date: Thu, 21 Apr 2016 22:27:32 -0700 X-Mailer: Evolution 3.10.4-0ubuntu2 Mime-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Eric Dumazet We should call consume_skb(skb) when skb is properly consumed, or kfree_skb(skb) when skb must be dropped in error case. Signed-off-by: Eric Dumazet --- net/ipv4/ip_sockglue.c | 10 +++++----- net/ipv6/datagram.c | 10 +++++----- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/net/ipv4/ip_sockglue.c b/net/ipv4/ip_sockglue.c index 279471c4e58f..e3ca3915dc74 100644 --- a/net/ipv4/ip_sockglue.c +++ b/net/ipv4/ip_sockglue.c @@ -510,9 +510,10 @@ int ip_recv_error(struct sock *sk, struct msghdr *msg, int len, int *addr_len) copied = len; } err = skb_copy_datagram_msg(skb, 0, msg, copied); - if (err) - goto out_free_skb; - + if (unlikely(err)) { + kfree_skb(skb); + return err; + } sock_recv_timestamp(msg, sk, skb); serr = SKB_EXT_ERR(skb); @@ -544,8 +545,7 @@ int ip_recv_error(struct sock *sk, struct msghdr *msg, int len, int *addr_len) msg->msg_flags |= MSG_ERRQUEUE; err = copied; -out_free_skb: - kfree_skb(skb); + consume_skb(skb); out: return err; } diff --git a/net/ipv6/datagram.c b/net/ipv6/datagram.c index a73d70119fcd..4b33e54c5753 100644 --- a/net/ipv6/datagram.c +++ b/net/ipv6/datagram.c @@ -407,9 +407,10 @@ int ipv6_recv_error(struct sock *sk, struct msghdr *msg, int len, int *addr_len) copied = len; } err = skb_copy_datagram_msg(skb, 0, msg, copied); - if (err) - goto out_free_skb; - + if (unlikely(err)) { + kfree_skb(skb); + return err; + } sock_recv_timestamp(msg, sk, skb); serr = SKB_EXT_ERR(skb); @@ -466,8 +467,7 @@ int ipv6_recv_error(struct sock *sk, struct msghdr *msg, int len, int *addr_len) msg->msg_flags |= MSG_ERRQUEUE; err = copied; -out_free_skb: - kfree_skb(skb); + consume_skb(skb); out: return err; }