From patchwork Thu Feb 27 11:57:58 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hans Schillstrom X-Patchwork-Id: 324782 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 70F832C009A for ; Thu, 27 Feb 2014 22:58:28 +1100 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753049AbaB0L6T (ORCPT ); Thu, 27 Feb 2014 06:58:19 -0500 Received: from smtp-gw11.han.skanova.net ([81.236.55.20]:33725 "EHLO smtp-gw11.han.skanova.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751978AbaB0L6P (ORCPT ); Thu, 27 Feb 2014 06:58:15 -0500 Received-SPF: none (smtp-gw11.han.skanova.net: domain schillstrom.com does not designate permitted sender hosts) identity=mailfrom; receiver=smtp-gw11.han.skanova.net; client_ip=213.65.94.224; envelope-from=hans@schillstrom.com; helo=mailer; Received: from mailer (213.65.94.224) by smtp-gw11.han.skanova.net (8.5.133) id 52F739C40081B664; Thu, 27 Feb 2014 12:58:13 +0100 Received: from hawk.mlab.se (hawk.mlab.se [172.24.1.21]) by mailer (8.14.4/8.14.4) with ESMTP id s1RBwBKH004034; Thu, 27 Feb 2014 12:58:11 +0100 Received: from hawk.mlab.se (localhost [127.0.0.1]) by hawk.mlab.se (8.14.5/8.14.5) with ESMTP id s1RBwBWP002320; Thu, 27 Feb 2014 12:58:11 +0100 Received: (from hans@localhost) by hawk.mlab.se (8.14.5/8.14.3/Submit) id s1RBwARf002162; Thu, 27 Feb 2014 12:58:10 +0100 From: Hans Schillstrom To: netdev@vger.kernel.org, davem@davemloft.net, ja@ssi.bg, aatteka@nicira.com, kaber@trash.net, ard@telegraafnet.nl, lvs-devel@vger.kernel.org Cc: Hans Schillstrom Subject: [PATCH net] ipv6: ipv6_find_hdr restore prev functionality Date: Thu, 27 Feb 2014 12:57:58 +0100 Message-Id: <1393502278-32297-1-git-send-email-hans@schillstrom.com> X-Mailer: git-send-email 1.7.11.7 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org The commit 9195bb8e381d81d5a315f911904cdf0cfcc919b8 ("ipv6: improve ipv6_find_hdr() to skip empty routing headers") broke ipv6_find_hdr(). When a target is specified like IPPROTO_ICMPV6 ipv6_find_hdr() returns -ENOENT when it's found, not the header as expected. A part of IPVS is broken and possible also nft_exthdr_eval(). When target is -1 which it is most cases, it works. This patch exits the do while loop if the specific header is found so the nexthdr could be returned as expected. Reported-by: Art -kwaak- van Breemen Signed-off-by: Hans Schillstrom CC:Ansis Atteka --- net/ipv6/exthdrs_core.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/net/ipv6/exthdrs_core.c b/net/ipv6/exthdrs_core.c index 140748d..8af3eb5 100644 --- a/net/ipv6/exthdrs_core.c +++ b/net/ipv6/exthdrs_core.c @@ -212,7 +212,7 @@ int ipv6_find_hdr(const struct sk_buff *skb, unsigned int *offset, found = (nexthdr == target); if ((!ipv6_ext_hdr(nexthdr)) || nexthdr == NEXTHDR_NONE) { - if (target < 0) + if (target < 0 || found) break; return -ENOENT; }