From patchwork Tue Apr 16 20:39:11 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paul Moore X-Patchwork-Id: 237084 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 C33442C013F for ; Wed, 17 Apr 2013 06:39:21 +1000 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S965280Ab3DPUjQ (ORCPT ); Tue, 16 Apr 2013 16:39:16 -0400 Received: from mx1.redhat.com ([209.132.183.28]:47485 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S965164Ab3DPUjO (ORCPT ); Tue, 16 Apr 2013 16:39:14 -0400 Received: from int-mx01.intmail.prod.int.phx2.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r3GKdD2r013712 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Tue, 16 Apr 2013 16:39:13 -0400 Received: from [127.0.0.1] (vpn-58-79.rdu2.redhat.com [10.10.58.79]) by int-mx01.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id r3GKdBJe027693; Tue, 16 Apr 2013 16:39:11 -0400 Subject: [RFC PATCH 1/3] skb: wrap skb_shared_info->destructor_arg access with set and get functions To: netdev@vger.kernel.org, linux-security-module@vger.kernel.org, selinux@tycho.nsa.gov From: Paul Moore Date: Tue, 16 Apr 2013 16:39:11 -0400 Message-ID: <20130416203911.10474.86849.stgit@localhost> In-Reply-To: <20130416202437.10474.45713.stgit@localhost> References: <20130416202437.10474.45713.stgit@localhost> User-Agent: StGit/0.16 MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.67 on 10.5.11.11 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Abstract away direct access to the "destructor_arg" field in the skb_shared_info struct via skb_destructor_arg_{set,get}() which is defined as a static inline in include/linux/skbuff.h. Signed-off-by: Paul Moore --- drivers/net/macvtap.c | 2 +- drivers/net/tun.c | 2 +- include/linux/skbuff.h | 19 +++++++++++++++++++ net/core/skbuff.c | 6 +++--- net/packet/af_packet.c | 4 ++-- 5 files changed, 26 insertions(+), 7 deletions(-) -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html diff --git a/drivers/net/macvtap.c b/drivers/net/macvtap.c index a449439..8179df0 100644 --- a/drivers/net/macvtap.c +++ b/drivers/net/macvtap.c @@ -729,7 +729,7 @@ static ssize_t macvtap_get_user(struct macvtap_queue *q, struct msghdr *m, vlan = rcu_dereference_bh(q->vlan); /* copy skb_ubuf_info for callback when skb has no error */ if (zerocopy) { - skb_shinfo(skb)->destructor_arg = m->msg_control; + skb_destructor_arg_set(skb, m->msg_control); skb_shinfo(skb)->tx_flags |= SKBTX_DEV_ZEROCOPY; skb_shinfo(skb)->tx_flags |= SKBTX_SHARED_FRAG; } diff --git a/drivers/net/tun.c b/drivers/net/tun.c index b7c457a..3cea09d 100644 --- a/drivers/net/tun.c +++ b/drivers/net/tun.c @@ -1199,7 +1199,7 @@ static ssize_t tun_get_user(struct tun_struct *tun, struct tun_file *tfile, /* copy skb_ubuf_info for callback when skb has no error */ if (zerocopy) { - skb_shinfo(skb)->destructor_arg = msg_control; + skb_destructor_arg_set(skb, msg_control); skb_shinfo(skb)->tx_flags |= SKBTX_DEV_ZEROCOPY; skb_shinfo(skb)->tx_flags |= SKBTX_SHARED_FRAG; } diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h index b8292d8..0998af3 100644 --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h @@ -696,6 +696,25 @@ static inline unsigned int skb_end_offset(const struct sk_buff *skb) /* Internal */ #define skb_shinfo(SKB) ((struct skb_shared_info *)(skb_end_pointer(SKB))) +/** + * skb_destructor_arg_set - set the packet's destructor argument + * @skb: packet + * @ptr: pointer to the destructor argument + */ +static inline void skb_destructor_arg_set(struct sk_buff *skb, void *ptr) +{ + skb_shinfo(skb)->destructor_arg = ptr; +} + +/** + * skb_destructor_arg_get - return the packet's destructor argument + * @skb: packet + */ +static inline void *skb_destructor_arg_get(const struct sk_buff *skb) +{ + return skb_shinfo(skb)->destructor_arg; +} + static inline struct skb_shared_hwtstamps *skb_hwtstamps(struct sk_buff *skb) { return &skb_shinfo(skb)->hwtstamps; diff --git a/net/core/skbuff.c b/net/core/skbuff.c index 33245ef..e4fa549 100644 --- a/net/core/skbuff.c +++ b/net/core/skbuff.c @@ -506,7 +506,7 @@ static void skb_release_data(struct sk_buff *skb) if (skb_shinfo(skb)->tx_flags & SKBTX_DEV_ZEROCOPY) { struct ubuf_info *uarg; - uarg = skb_shinfo(skb)->destructor_arg; + uarg = skb_destructor_arg_get(skb); if (uarg->callback) uarg->callback(uarg, true); } @@ -635,7 +635,7 @@ void skb_tx_error(struct sk_buff *skb) if (skb_shinfo(skb)->tx_flags & SKBTX_DEV_ZEROCOPY) { struct ubuf_info *uarg; - uarg = skb_shinfo(skb)->destructor_arg; + uarg = skb_destructor_arg_get(skb); if (uarg->callback) uarg->callback(uarg, false); skb_shinfo(skb)->tx_flags &= ~SKBTX_DEV_ZEROCOPY; @@ -782,7 +782,7 @@ int skb_copy_ubufs(struct sk_buff *skb, gfp_t gfp_mask) int i; int num_frags = skb_shinfo(skb)->nr_frags; struct page *page, *head = NULL; - struct ubuf_info *uarg = skb_shinfo(skb)->destructor_arg; + struct ubuf_info *uarg = skb_destructor_arg_get(skb); for (i = 0; i < num_frags; i++) { u8 *vaddr; diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c index 1d6793d..32f186b 100644 --- a/net/packet/af_packet.c +++ b/net/packet/af_packet.c @@ -1833,7 +1833,7 @@ static void tpacket_destruct_skb(struct sk_buff *skb) void *ph; if (likely(po->tx_ring.pg_vec)) { - ph = skb_shinfo(skb)->destructor_arg; + ph = skb_destructor_arg_get(skb); BUG_ON(atomic_read(&po->tx_ring.pending) == 0); atomic_dec(&po->tx_ring.pending); __packet_set_status(po, ph, TP_STATUS_AVAILABLE); @@ -1863,7 +1863,7 @@ static int tpacket_fill_skb(struct packet_sock *po, struct sk_buff *skb, skb->dev = dev; skb->priority = po->sk.sk_priority; skb->mark = po->sk.sk_mark; - skb_shinfo(skb)->destructor_arg = ph.raw; + skb_destructor_arg_set(skb, ph.raw); switch (po->tp_version) { case TPACKET_V2: