From patchwork Thu Apr 7 18:54:16 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexander Aring X-Patchwork-Id: 8776501 Return-Path: X-Original-To: patchwork-linux-wpan@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork2.web.kernel.org (Postfix) with ESMTP id 87E71C0553 for ; Thu, 7 Apr 2016 19:00:04 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 1B8FE2026F for ; Thu, 7 Apr 2016 19:00:03 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 3B50B20222 for ; Thu, 7 Apr 2016 19:00:02 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753532AbcDGS77 (ORCPT ); Thu, 7 Apr 2016 14:59:59 -0400 Received: from metis.ext.4.pengutronix.de ([92.198.50.35]:54103 "EHLO metis.ext.4.pengutronix.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932312AbcDGSym (ORCPT ); Thu, 7 Apr 2016 14:54:42 -0400 Received: from gallifrey.ext.pengutronix.de ([2001:67c:670:201:5054:ff:fe8d:eefb] helo=omega.localdomain) by metis.ext.pengutronix.de with esmtp (Exim 4.80) (envelope-from ) id 1aoF4e-0003du-4K; Thu, 07 Apr 2016 20:54:36 +0200 From: Alexander Aring To: linux-wpan@vger.kernel.org Cc: kernel@pengutronix.de, jukka.rissanen@linux.intel.com, hannes@stressinduktion.org, stefan@osg.samsung.com, mcr@sandelman.ca, werner@almesberger.net, Alexander Aring Subject: [RFCv2 bluetooth-next 15/21] ndisc: add addr_len parameter to ndisc_opt_addr_space Date: Thu, 7 Apr 2016 20:54:16 +0200 Message-Id: <1460055262-4330-16-git-send-email-aar@pengutronix.de> X-Mailer: git-send-email 2.8.0 In-Reply-To: <1460055262-4330-1-git-send-email-aar@pengutronix.de> References: <1460055262-4330-1-git-send-email-aar@pengutronix.de> X-SA-Exim-Connect-IP: 2001:67c:670:201:5054:ff:fe8d:eefb X-SA-Exim-Mail-From: aar@pengutronix.de X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-wpan@vger.kernel.org Sender: linux-wpan-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-wpan@vger.kernel.org X-Spam-Status: No, score=-7.9 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_HI, RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP This patch makes the address length as argument for the ndisc_opt_addr_space function. This is necessary to handle addresses which don't use dev->addr_len as address length. Signed-off-by: Alexander Aring --- include/net/ndisc.h | 8 ++++---- net/ipv6/ndisc.c | 10 +++++----- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/include/net/ndisc.h b/include/net/ndisc.h index 2d8edaa..ef43e88 100644 --- a/include/net/ndisc.h +++ b/include/net/ndisc.h @@ -127,10 +127,10 @@ static inline int ndisc_addr_option_pad(unsigned short type) } } -static inline int ndisc_opt_addr_space(struct net_device *dev) +static inline int ndisc_opt_addr_space(struct net_device *dev, + unsigned char addr_len) { - return NDISC_OPT_SPACE(dev->addr_len + - ndisc_addr_option_pad(dev->type)); + return NDISC_OPT_SPACE(addr_len + ndisc_addr_option_pad(dev->type)); } static inline u8 *ndisc_opt_addr_data(struct nd_opt_hdr *p, @@ -139,7 +139,7 @@ static inline u8 *ndisc_opt_addr_data(struct nd_opt_hdr *p, u8 *lladdr = (u8 *)(p + 1); int lladdrlen = p->nd_opt_len << 3; int prepad = ndisc_addr_option_pad(dev->type); - if (lladdrlen != ndisc_opt_addr_space(dev)) + if (lladdrlen != ndisc_opt_addr_space(dev, dev->addr_len)) return NULL; return lladdr + prepad; } diff --git a/net/ipv6/ndisc.c b/net/ipv6/ndisc.c index c245895..69e20e3 100644 --- a/net/ipv6/ndisc.c +++ b/net/ipv6/ndisc.c @@ -154,7 +154,7 @@ static void ndisc_fill_addr_option(struct sk_buff *skb, int type, void *data) { int pad = ndisc_addr_option_pad(skb->dev->type); int data_len = skb->dev->addr_len; - int space = ndisc_opt_addr_space(skb->dev); + int space = ndisc_opt_addr_space(skb->dev, skb->dev->addr_len); u8 *opt = skb_put(skb, space); opt[0] = type; @@ -509,7 +509,7 @@ void ndisc_send_na(struct net_device *dev, const struct in6_addr *daddr, if (!dev->addr_len) inc_opt = 0; if (inc_opt) - optlen += ndisc_opt_addr_space(dev); + optlen += ndisc_opt_addr_space(dev, dev->addr_len); skb = ndisc_alloc_skb(dev, sizeof(*msg) + optlen); if (!skb) @@ -574,7 +574,7 @@ void ndisc_send_ns(struct net_device *dev, const struct in6_addr *solicit, if (ipv6_addr_any(saddr)) inc_opt = false; if (inc_opt) - optlen += ndisc_opt_addr_space(dev); + optlen += ndisc_opt_addr_space(dev, dev->addr_len); skb = ndisc_alloc_skb(dev, sizeof(*msg) + optlen); if (!skb) @@ -626,7 +626,7 @@ void ndisc_send_rs(struct net_device *dev, const struct in6_addr *saddr, } #endif if (send_sllao) - optlen += ndisc_opt_addr_space(dev); + optlen += ndisc_opt_addr_space(dev, dev->addr_len); skb = ndisc_alloc_skb(dev, sizeof(*msg) + optlen); if (!skb) @@ -1563,7 +1563,7 @@ void ndisc_send_redirect(struct sk_buff *skb, const struct in6_addr *target) memcpy(ha_buf, neigh->ha, dev->addr_len); read_unlock_bh(&neigh->lock); ha = ha_buf; - optlen += ndisc_opt_addr_space(dev); + optlen += ndisc_opt_addr_space(dev, dev->addr_len); } else read_unlock_bh(&neigh->lock);