{"id":808402,"url":"http://patchwork.ozlabs.org/api/1.0/patches/808402/?format=json","project":{"id":7,"url":"http://patchwork.ozlabs.org/api/1.0/projects/7/?format=json","name":"Linux network development","link_name":"netdev","list_id":"netdev.vger.kernel.org","list_email":"netdev@vger.kernel.org","web_url":null,"scm_url":null,"webscm_url":null},"msgid":"<20170831203013.9219-3-edumazet@google.com>","date":"2017-08-31T20:30:13","name":"[net-next,2/2] net: convert (struct ubuf_info)->refcnt to refcount_t","commit_ref":null,"pull_url":null,"state":"superseded","archived":true,"hash":"4b4d889795dbf433cbbd8014df8aa9877e443590","submitter":{"id":13357,"url":"http://patchwork.ozlabs.org/api/1.0/people/13357/?format=json","name":"Eric Dumazet","email":"edumazet@google.com"},"delegate":{"id":34,"url":"http://patchwork.ozlabs.org/api/1.0/users/34/?format=json","username":"davem","first_name":"David","last_name":"Miller","email":"davem@davemloft.net"},"mbox":"http://patchwork.ozlabs.org/project/netdev/patch/20170831203013.9219-3-edumazet@google.com/mbox/","series":[{"id":902,"url":"http://patchwork.ozlabs.org/api/1.0/series/902/?format=json","date":"2017-08-31T20:30:11","name":"net: ubuf_info.refcnt conversion","version":1,"mbox":"http://patchwork.ozlabs.org/series/902/mbox/"}],"check":"pending","checks":"http://patchwork.ozlabs.org/api/patches/808402/checks/","tags":{},"headers":{"Return-Path":"<netdev-owner@vger.kernel.org>","X-Original-To":"patchwork-incoming@ozlabs.org","Delivered-To":"patchwork-incoming@ozlabs.org","Authentication-Results":["ozlabs.org;\n\tspf=none (mailfrom) smtp.mailfrom=vger.kernel.org\n\t(client-ip=209.132.180.67; helo=vger.kernel.org;\n\tenvelope-from=netdev-owner@vger.kernel.org;\n\treceiver=<UNKNOWN>)","ozlabs.org; dkim=pass (2048-bit key;\n\tunprotected) header.d=google.com header.i=@google.com\n\theader.b=\"rahAA1bt\"; dkim-atps=neutral"],"Received":["from vger.kernel.org (vger.kernel.org [209.132.180.67])\n\tby ozlabs.org (Postfix) with ESMTP id 3xjvBt2nvcz9s83\n\tfor <patchwork-incoming@ozlabs.org>;\n\tFri,  1 Sep 2017 06:30:30 +1000 (AEST)","(majordomo@vger.kernel.org) by vger.kernel.org via listexpand\n\tid S1751355AbdHaUa1 (ORCPT <rfc822;patchwork-incoming@ozlabs.org>);\n\tThu, 31 Aug 2017 16:30:27 -0400","from mail-pg0-f52.google.com ([74.125.83.52]:36916 \"EHLO\n\tmail-pg0-f52.google.com\" rhost-flags-OK-OK-OK-OK) by vger.kernel.org\n\twith ESMTP id S1751053AbdHaUaZ (ORCPT\n\t<rfc822;netdev@vger.kernel.org>); Thu, 31 Aug 2017 16:30:25 -0400","by mail-pg0-f52.google.com with SMTP id 83so2018808pgb.4\n\tfor <netdev@vger.kernel.org>; Thu, 31 Aug 2017 13:30:25 -0700 (PDT)","from localhost ([2620:15c:2cb:201:df6:9252:fc0d:50b2])\n\tby smtp.gmail.com with ESMTPSA id\n\tl11sm638200pfi.97.2017.08.31.13.30.24\n\t(version=TLS1_2 cipher=AES128-SHA bits=128/128);\n\tThu, 31 Aug 2017 13:30:24 -0700 (PDT)"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=google.com; s=20161025;\n\th=from:to:cc:subject:date:message-id:in-reply-to:references;\n\tbh=zbvGxU9LayBB0xir4UyXbwhoRDZL7AfjOgxwc4XZE2o=;\n\tb=rahAA1bt1BLPXnw9Le7dFVr/iNNxkaPv6Ac/B5D4IjacD2YKADM5nk0R3t1lbxe+dk\n\totIyUpA2/Cx74vfrqVevbXLPQxEEYJV0pT/9zjRAuegY3T2a8HeSEtwrYJR/0VLXndO7\n\tH8WFrvKOB9W4hrZBhZJjZyXNzebzfw0ZdBQ+nRwKiFCAqxfOyCjHW0RgMLFfBYDAsmyn\n\tRKeuiRJcSAQTZ6WbmdL7YohUMrWtWkdePNwUh6qryEd8G3uaiK1u+6PuVk/0nLfwHPQr\n\tn3WJrxJGq+uv/am70KDOwxmds1fF4FhfnbolnVNMJ7agrsoCDTJkUvS1SSqV+40yYm86\n\tVpvA==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20161025;\n\th=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to\n\t:references;\n\tbh=zbvGxU9LayBB0xir4UyXbwhoRDZL7AfjOgxwc4XZE2o=;\n\tb=AanEcJ3sVqAZ41MF0/2McwWv8gIMwr4PRhKXE5r3qZCjfq4K5qxYryB2Dot2RcdHXn\n\tyXq2GXxqWUyAr3sIxgFFTSVeryZCB3N2iDibk9Z2O6R7xFtBehDdCjUSz8enywapIIR5\n\tlqXIF+MW33edmWbGMtaWguhJbDl9TSQ2Uo1sUEqLhbfiYcNUNIn32BZqNCDqkTjay7y7\n\t8XjRuRYFBVvoTc/BJTWLHf+ZMKSEhGdA8yxw0qLucCkT9EjKLSDTK/CkecjK06O00acV\n\t3dF64+f7PPMhiVSbbMdLwXmEOt8TrwuknDWQZhdFjP/OJ4wOp3CAoKavrVKKKRaGDZav\n\tzsBA==","X-Gm-Message-State":"AHYfb5j6H9EdCbYRGVyhRsMEwC5bBE5F5NY9nKVfs9uqH+IULhquVNZZ\n\t0zaEJIkUSHV87uWiOzuW4g==","X-Google-Smtp-Source":"ADKCNb5eUDJQRxIIzPaFWxVrpVZtlzE+yslyUwdNuJbMM/rLcYi4f6HaLgV80Dgefrp/oNgjdZ3jew==","X-Received":"by 10.98.245.132 with SMTP id b4mr3600287pfm.313.1504211425172; \n\tThu, 31 Aug 2017 13:30:25 -0700 (PDT)","From":"Eric Dumazet <edumazet@google.com>","To":"\"David S . Miller\" <davem@davemloft.net>","Cc":"netdev <netdev@vger.kernel.org>, Willem de Bruijn <willemb@google.com>,\n\tEric Dumazet <edumazet@google.com>, Eric Dumazet <eric.dumazet@gmail.com>","Subject":"[PATCH net-next 2/2] net: convert (struct ubuf_info)->refcnt to\n\trefcount_t","Date":"Thu, 31 Aug 2017 13:30:13 -0700","Message-Id":"<20170831203013.9219-3-edumazet@google.com>","X-Mailer":"git-send-email 2.14.1.581.gf28d330327-goog","In-Reply-To":"<20170831203013.9219-1-edumazet@google.com>","References":"<20170831203013.9219-1-edumazet@google.com>","Sender":"netdev-owner@vger.kernel.org","Precedence":"bulk","List-ID":"<netdev.vger.kernel.org>","X-Mailing-List":"netdev@vger.kernel.org"},"content":"refcount_t type and corresponding API should be\nused instead of atomic_t when the variable is used as\na reference counter. This allows to avoid accidental\nrefcounter overflows that might lead to use-after-free\nsituations.\n\nSigned-off-by: Eric Dumazet <edumazet@google.com>\n---\n include/linux/skbuff.h | 5 +++--\n net/core/skbuff.c      | 8 ++++----\n 2 files changed, 7 insertions(+), 6 deletions(-)","diff":"diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h\nindex 7594e19bce622a38dc39c054093c3da15b99b67b..316a92b45351f53709886ee0099cbc83b66f1b15 100644\n--- a/include/linux/skbuff.h\n+++ b/include/linux/skbuff.h\n@@ -22,6 +22,7 @@\n #include <linux/cache.h>\n #include <linux/rbtree.h>\n #include <linux/socket.h>\n+#include <linux/refcount.h>\n \n #include <linux/atomic.h>\n #include <asm/types.h>\n@@ -456,7 +457,7 @@ struct ubuf_info {\n \t\t\tu32 bytelen;\n \t\t};\n \t};\n-\tatomic_t refcnt;\n+\trefcount_t refcnt;\n \n \tstruct mmpin {\n \t\tstruct user_struct *user;\n@@ -472,7 +473,7 @@ struct ubuf_info *sock_zerocopy_realloc(struct sock *sk, size_t size,\n \n static inline void sock_zerocopy_get(struct ubuf_info *uarg)\n {\n-\tatomic_inc(&uarg->refcnt);\n+\trefcount_inc(&uarg->refcnt);\n }\n \n void sock_zerocopy_put(struct ubuf_info *uarg);\ndiff --git a/net/core/skbuff.c b/net/core/skbuff.c\nindex 65b9ca3945f8fd2b1bef4aef5dd774be04e5d128..ed86ca9afd9d8d1ac47983acf6006c179285a612 100644\n--- a/net/core/skbuff.c\n+++ b/net/core/skbuff.c\n@@ -963,7 +963,7 @@ struct ubuf_info *sock_zerocopy_alloc(struct sock *sk, size_t size)\n \tuarg->len = 1;\n \tuarg->bytelen = size;\n \tuarg->zerocopy = 1;\n-\tatomic_set(&uarg->refcnt, 1);\n+\trefcount_set(&uarg->refcnt, 1);\n \tsock_hold(sk);\n \n \treturn uarg;\n@@ -1086,7 +1086,7 @@ EXPORT_SYMBOL_GPL(sock_zerocopy_callback);\n \n void sock_zerocopy_put(struct ubuf_info *uarg)\n {\n-\tif (uarg && atomic_dec_and_test(&uarg->refcnt)) {\n+\tif (uarg && refcount_dec_and_test(&uarg->refcnt)) {\n \t\tif (uarg->callback)\n \t\t\tuarg->callback(uarg, uarg->zerocopy);\n \t\telse\n@@ -1108,7 +1108,7 @@ void sock_zerocopy_put_abort(struct ubuf_info *uarg)\n \t\t * avoid an skb send inside the main loop triggering uarg free.\n \t\t */\n \t\tif (sk->sk_type != SOCK_STREAM)\n-\t\t\tatomic_inc(&uarg->refcnt);\n+\t\t\trefcount_inc(&uarg->refcnt);\n \n \t\tsock_zerocopy_put(uarg);\n \t}\n@@ -1490,7 +1490,7 @@ int pskb_expand_head(struct sk_buff *skb, int nhead, int ntail,\n \t\tif (skb_orphan_frags(skb, gfp_mask))\n \t\t\tgoto nofrags;\n \t\tif (skb_zcopy(skb))\n-\t\t\tatomic_inc(&skb_uarg(skb)->refcnt);\n+\t\t\trefcount_inc(&skb_uarg(skb)->refcnt);\n \t\tfor (i = 0; i < skb_shinfo(skb)->nr_frags; i++)\n \t\t\tskb_frag_ref(skb, i);\n \n","prefixes":["net-next","2/2"]}