Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp5609907imu; Mon, 26 Nov 2018 02:58:42 -0800 (PST) X-Google-Smtp-Source: AJdET5c6f0bQos7Cy8Uq36KTxe3MRIJuBdRgP4390vEjJZYCIiU6DdFg2oQ+d6mp/iB4/wRQV/Qa X-Received: by 2002:a62:8145:: with SMTP id t66mr27581895pfd.55.1543229922458; Mon, 26 Nov 2018 02:58:42 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1543229922; cv=none; d=google.com; s=arc-20160816; b=FbcXoqX4WOSZcubKaE7dhWhTjQJhqV2LUoW84K5TA4R8MXaw8MROV5z+euQDvs8kDC hJWJ8i9pIMFgoIeTz+bGvBVE6n3oiyjqY7bJLV5d91aPMPe8r2RZzG42n+r75IvBujug syS7wkN9rhR24Uq3+3dYS+NGx7VS9Q/gRBcVgkCmfXXEkBFdZsN4zNKieYyNfmdMtGfV wZEACW7WigpCqmX0ackZLx70qZSyfLgY4m5z11g1EKnBdYcj6FJJ82jrPewzQZfqgRJ/ N8ns/yRkCH3SHaxLK3LDfgtnReXJKecQy7fS4guaV9uwVE0p95psZefUHgeOjQpweNZI f+rQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=hUY4TUa2+n4hEKJ1VS/HLYcG+/BD05Olq5I5T7XkJEo=; b=AHQQfnB8SkyE0Vn+F978+sFbwfdqIeiKPz5supWyVYpiwZj1q4YqURxk09QptvoKW/ SKjItnTVm7a6lvsLH3/CIm5iqlJiFoaVkLJy+Id4F93O3IwtxVuAKYdxX2b3oTTuC3xc uuGvQ1jOo0JYkg+wRurgA4dDgBeqcoKyyWm7UTx50WHZRc0GTvaXaITNAnDRnifRvfxT BnM/ehUjRHIVz6CRcQYv8jX2a3T8ZpS8zuO4rgPxNd5GIWs2i0MVCViZrGWbpMLqZZtl zEqoKVX64H+OlMurDEpuSjf+bUB5bVsE1nxOsYEapJKMT2MkMbSjwx3QKkd3gL3smt06 PeqA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=Ty4N0uIr; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id p16si28567945plr.31.2018.11.26.02.58.27; Mon, 26 Nov 2018 02:58:42 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=Ty4N0uIr; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728729AbeKZVuy (ORCPT + 99 others); Mon, 26 Nov 2018 16:50:54 -0500 Received: from mail.kernel.org ([198.145.29.99]:60192 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727203AbeKZVux (ORCPT ); Mon, 26 Nov 2018 16:50:53 -0500 Received: from localhost (5356596B.cm-6-7b.dynamic.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 8A88F21104; Mon, 26 Nov 2018 10:57:08 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1543229829; bh=3QujUCfT7RZi0NMIMQvvvqh6PAUVZx610sGrNelOdbM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Ty4N0uIrlOqC7HB0ma0XuS/CBsy8tReSlIbRoYpnD8XVHPCzABhE3qx2kRqbiJt1U KxOFcD8UEESs6zZRJxgUKXf5kEDLELW86YfGEBOl49v082Q9xtNmUs4cZ73qbCdLnw jhdCQJEsv/rsQj8zczSKROUX0uhNaxANH9eaxy6o= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Julian Wiedmann , "David S. Miller" , Sasha Levin Subject: [PATCH 4.9 18/46] s390/qeth: fix HiperSockets sniffer Date: Mon, 26 Nov 2018 11:51:07 +0100 Message-Id: <20181126105047.933950804@linuxfoundation.org> X-Mailer: git-send-email 2.19.2 In-Reply-To: <20181126105045.447291262@linuxfoundation.org> References: <20181126105045.447291262@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 4.9-stable review patch. If anyone has any objections, please let me know. ------------------ [ Upstream commit bd74a7f9cc033cf4d405788f80292268987dc0c5 ] Sniffing mode for L3 HiperSockets requires that no IP addresses are registered with the HW. The preferred way to achieve this is for userspace to delete all the IPs on the interface. But qeth is expected to also tolerate a configuration where that is not the case, by skipping the IP registration when in sniffer mode. Since commit 5f78e29ceebf ("qeth: optimize IP handling in rx_mode callback") reworked the IP registration logic in the L3 subdriver, this no longer works. When the qeth device is set online, qeth_l3_recover_ip() now unconditionally registers all unicast addresses from our internal IP table. While we could fix this particular problem by skipping qeth_l3_recover_ip() on a sniffer device, the more future-proof change is to skip the IP address registration at the lowest level. This way we a) catch any future code path that attempts to register an IP address without considering the sniffer scenario, and b) continue to build up our internal IP table, so that if sniffer mode is switched off later we can operate just like normal. Fixes: 5f78e29ceebf ("qeth: optimize IP handling in rx_mode callback") Signed-off-by: Julian Wiedmann Signed-off-by: David S. Miller Signed-off-by: Sasha Levin --- drivers/s390/net/qeth_l3_main.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/drivers/s390/net/qeth_l3_main.c b/drivers/s390/net/qeth_l3_main.c index efefe075557f..6e6ba1baf9c4 100644 --- a/drivers/s390/net/qeth_l3_main.c +++ b/drivers/s390/net/qeth_l3_main.c @@ -363,9 +363,6 @@ static void qeth_l3_clear_ip_htable(struct qeth_card *card, int recover) QETH_CARD_TEXT(card, 4, "clearip"); - if (recover && card->options.sniffer) - return; - spin_lock_bh(&card->ip_lock); hash_for_each_safe(card->ip_htable, i, tmp, addr, hnode) { @@ -823,6 +820,8 @@ static int qeth_l3_register_addr_entry(struct qeth_card *card, int rc = 0; int cnt = 3; + if (card->options.sniffer) + return 0; if (addr->proto == QETH_PROT_IPV4) { QETH_CARD_TEXT(card, 2, "setaddr4"); @@ -858,6 +857,9 @@ static int qeth_l3_deregister_addr_entry(struct qeth_card *card, { int rc = 0; + if (card->options.sniffer) + return 0; + if (addr->proto == QETH_PROT_IPV4) { QETH_CARD_TEXT(card, 2, "deladdr4"); QETH_CARD_HEX(card, 3, &addr->u.a4.addr, sizeof(int)); -- 2.17.1