From patchwork Fri Apr 13 14:09:58 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Taehee Yoo X-Patchwork-Id: 897953 X-Patchwork-Delegate: pablo@netfilter.org Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.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=netfilter-devel-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="CBeBLeTh"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 40N0675rRsz9s06 for ; Sat, 14 Apr 2018 00:10:07 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754188AbeDMOKG (ORCPT ); Fri, 13 Apr 2018 10:10:06 -0400 Received: from mail-pg0-f65.google.com ([74.125.83.65]:46108 "EHLO mail-pg0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753884AbeDMOKG (ORCPT ); Fri, 13 Apr 2018 10:10:06 -0400 Received: by mail-pg0-f65.google.com with SMTP id t12so1987063pgp.13 for ; Fri, 13 Apr 2018 07:10:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=t2FLRdV98Q4Fif6w0LprNhkZP/FZo3mdpIFQACkRLOw=; b=CBeBLeTh4IlLg5bXTulqGCrtLOZcOJ8TiiNk5BANNkAq7cFL+iGIjDVAZ41vFOnZeT Qo/BSsRy7NhPnvbUWPJhSHrdJeEW2dyYzFrTz5jbd4RtoH4duwLr1vIx1Y5DAguU1GDq Yi0OUORuYHTaTYUrRqytRHpCzjS2JBjuyjpJ1ebaENMRm0DedLNmQCKUlaF4ovT/QKFP SXOUaNsvKaN8hEave5wngSiT5nfDWCt4W9QZ9YPWyWpv2edqgyUqnz1IeUyVIiEm2Rcf y6UaIPlyBUKb6Ed6T5a+FHbU8kK4oa/y3fxuzhaAMG6FED1pijgtAFa+sOZuX5NU8ESk kvZw== 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; bh=t2FLRdV98Q4Fif6w0LprNhkZP/FZo3mdpIFQACkRLOw=; b=CF4aIHsawESDO032z4bRC+WZvBhjiRoKB7O3l2vW9lYBTuOlP+DYMsOHD2DDgyesZl IUHDb+vKS1raVJGX0zP89FnSujGMmlx5zPoXaiB8absQfct54lya+8+0fS9D9g6Gh+97 75J0aGKSe7HzotUolcBfr7+7EfKtlVOquP/lAEMShWHxHkG3HLckvm1dDecJxNxmcddx GVjjUmCjReJtMLDPMZe+bkpSGvGz5Ct/NZb8w31d9x30Gzzg1VLWCHazgTFZWE6m5MBQ srG92dloZvpizIFSR+Gfgl+zJENYnDfzsumvRPRjnkq1N3AZD1zAGxOXUYB9VYzGbei+ BznQ== X-Gm-Message-State: ALQs6tCZoBg4YAUqA6cAfxevLZIcMMUe7kB7Fk+W4u0CKm2Wxs+beWs+ RZUjeZ9kDXmM6xBIeJE1XG0= X-Google-Smtp-Source: AIpwx48muqr9+6lwvMm+cUtPWhxMDZ/N87BnHx/AxFt+OTIdkZA97lUojpXeARERPsC9Nf8lxrEEeA== X-Received: by 10.101.83.65 with SMTP id w1mr4299148pgr.111.1523628605515; Fri, 13 Apr 2018 07:10:05 -0700 (PDT) Received: from ap-To-be-filled-by-O-E-M.8.8.8.8 ([125.130.197.10]) by smtp.gmail.com with ESMTPSA id n73sm15823810pfb.108.2018.04.13.07.10.03 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 13 Apr 2018 07:10:04 -0700 (PDT) From: Taehee Yoo To: pablo@netfilter.org, netfilter-devel@vger.kernel.org Cc: ap420073@gmail.com Subject: [PATCH nf-next] netfilter: ebtables: add ebt_get_target and ebt_get_target_c Date: Fri, 13 Apr 2018 23:09:58 +0900 Message-Id: <20180413140958.16491-1-ap420073@gmail.com> X-Mailer: git-send-email 2.9.3 Sender: netfilter-devel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netfilter-devel@vger.kernel.org ebt_get_target similar to {ip/ip6/arp}t_get_target. and ebt_get_target_c similar to {ip/ip6/arp}t_get_target_c. Signed-off-by: Taehee Yoo --- include/uapi/linux/netfilter_bridge/ebtables.h | 6 ++++++ net/bridge/netfilter/ebtables.c | 22 +++++++++++++--------- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/include/uapi/linux/netfilter_bridge/ebtables.h b/include/uapi/linux/netfilter_bridge/ebtables.h index 0c7dc83..3b86c14 100644 --- a/include/uapi/linux/netfilter_bridge/ebtables.h +++ b/include/uapi/linux/netfilter_bridge/ebtables.h @@ -191,6 +191,12 @@ struct ebt_entry { unsigned char elems[0] __attribute__ ((aligned (__alignof__(struct ebt_replace)))); }; +static __inline__ struct ebt_entry_target * +ebt_get_target(struct ebt_entry *e) +{ + return (void *)e + e->target_offset; +} + /* {g,s}etsockopt numbers */ #define EBT_BASE_CTL 128 diff --git a/net/bridge/netfilter/ebtables.c b/net/bridge/netfilter/ebtables.c index 032e0fe..018c24e 100644 --- a/net/bridge/netfilter/ebtables.c +++ b/net/bridge/netfilter/ebtables.c @@ -177,6 +177,12 @@ struct ebt_entry *ebt_next_entry(const struct ebt_entry *entry) return (void *)entry + entry->next_offset; } +static inline const struct ebt_entry_target * +ebt_get_target_c(const struct ebt_entry *e) +{ + return ebt_get_target((struct ebt_entry *)e); +} + /* Do some firewalling */ unsigned int ebt_do_table(struct sk_buff *skb, const struct nf_hook_state *state, @@ -230,8 +236,7 @@ unsigned int ebt_do_table(struct sk_buff *skb, */ EBT_WATCHER_ITERATE(point, ebt_do_watcher, skb, &acpar); - t = (struct ebt_entry_target *) - (((char *)point) + point->target_offset); + t = ebt_get_target_c(point); /* standard target */ if (!t->u.target->target) verdict = ((struct ebt_standard_target *)t)->verdict; @@ -627,7 +632,7 @@ ebt_cleanup_entry(struct ebt_entry *e, struct net *net, unsigned int *cnt) return 1; EBT_WATCHER_ITERATE(e, ebt_cleanup_watcher, net, NULL); EBT_MATCH_ITERATE(e, ebt_cleanup_match, net, NULL); - t = (struct ebt_entry_target *)(((char *)e) + e->target_offset); + t = ebt_get_target(e); par.net = net; par.target = t->u.target; @@ -706,7 +711,7 @@ ebt_check_entry(struct ebt_entry *e, struct net *net, ret = EBT_WATCHER_ITERATE(e, ebt_check_watcher, &tgpar, &j); if (ret != 0) goto cleanup_watchers; - t = (struct ebt_entry_target *)(((char *)e) + e->target_offset); + t = ebt_get_target(e); gap = e->next_offset - e->target_offset; target = xt_request_find_target(NFPROTO_BRIDGE, t->u.name, 0); @@ -779,8 +784,7 @@ static int check_chainloops(const struct ebt_entries *chain, struct ebt_cl_stack if (pos == nentries) continue; } - t = (struct ebt_entry_target *) - (((char *)e) + e->target_offset); + t = ebt_get_target_c(e); if (strcmp(t->u.name, EBT_STANDARD_TARGET)) goto letscontinue; if (e->target_offset + sizeof(struct ebt_standard_target) > @@ -1405,7 +1409,7 @@ static inline int ebt_entry_to_user(struct ebt_entry *e, const char *base, return -EFAULT; hlp = ubase + (((char *)e + e->target_offset) - base); - t = (struct ebt_entry_target *)(((char *)e) + e->target_offset); + t = ebt_get_target_c(e); ret = EBT_MATCH_ITERATE(e, ebt_match_to_user, base, ubase); if (ret != 0) @@ -1746,7 +1750,7 @@ static int compat_copy_entry_to_user(struct ebt_entry *e, void __user **dstptr, return ret; target_offset = e->target_offset - (origsize - *size); - t = (struct ebt_entry_target *) ((char *) e + e->target_offset); + t = ebt_get_target(e); ret = compat_target_to_user(t, dstptr, size); if (ret) @@ -1794,7 +1798,7 @@ static int compat_calc_entry(const struct ebt_entry *e, EBT_MATCH_ITERATE(e, compat_calc_match, &off); EBT_WATCHER_ITERATE(e, compat_calc_watcher, &off); - t = (const struct ebt_entry_target *) ((char *) e + e->target_offset); + t = ebt_get_target_c(e); off += xt_compat_target_offset(t->u.target); off += ebt_compat_entry_padsize();