From patchwork Thu Nov 20 06:04:40 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zhu Yanjun X-Patchwork-Id: 412570 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 715BB14009B for ; Thu, 20 Nov 2014 17:05:10 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1750820AbaKTGFC (ORCPT ); Thu, 20 Nov 2014 01:05:02 -0500 Received: from mail-pd0-f180.google.com ([209.85.192.180]:57997 "EHLO mail-pd0-f180.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750752AbaKTGFB (ORCPT ); Thu, 20 Nov 2014 01:05:01 -0500 Received: by mail-pd0-f180.google.com with SMTP id p10so2399327pdj.25 for ; Wed, 19 Nov 2014 22:05:00 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id; bh=yKluJ10o8jBtRs2ELd7MWuzymzRt1eOY/BZBgBnWALU=; b=lU3zktve/picKFbbTM0lwrWU5IeDRv0YmvriHgwGVWjjXeHEoQjuwQVaXQCnGTpm3K ABKjO71MNF2VMhbfmk+SP8b79F7/gdIs25i2Do2r2xTFVUVIYEr1KU8Tyo6BwvWfl6AW QAos+4ZVwpsEhWxM9rAb+woccGOK8LYl7IH18J+1W/ZhBoALSd262wvO7UlqEywljC2u qX9aXLtg5Eld9JKcvps+GsuE60VfXZDVOHV8O+uDI6b5DeW58a6G0H04i0qkUuDV+z3o R4ovN6rL+PRnBtg5evl5d5RwvYprWZtgd4aO0GSpRzbh8qQMxVyWMZrn7/FbnZXqY6hL 3RWw== X-Received: by 10.68.201.226 with SMTP id kd2mr52174408pbc.75.1416463500575; Wed, 19 Nov 2014 22:05:00 -0800 (PST) Received: from wind-OptiPlex-780.corp.ad.wrs.com ([106.120.101.38]) by mx.google.com with ESMTPSA id oo9sm949051pdb.26.2014.11.19.22.04.51 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 19 Nov 2014 22:04:59 -0800 (PST) From: Zhu Yanjun X-Google-Original-From: Zhu Yanjun To: netdev@vger.kernel.org, w@1wt.eu, zyjzyj2000@gmail.com, khandelwal.deepak.1987@gmail.com, vyasevich@gmail.com, tuexen@fh-muenster.de, dborkman@redhat.com Cc: Zhu Yanjun , "David S. Miller" Subject: [PATCH 1/1] sctp: not send SCTP_PEER_ADDR_CHANGE notifications with failed probe Date: Thu, 20 Nov 2014 14:04:40 +0800 Message-Id: <1416463480-29036-1-git-send-email-Yanjun.Zhu@windriver.com> X-Mailer: git-send-email 1.9.1 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org 2.6.x kernels require a similar logic change as commit 2c0d6ac894a [sctp: not send SCTP_PEER_ADDR_CHANGE notifications with failed probe] introduces for newer kernels. Since the transport has always been in state SCTP_UNCONFIRMED, it therefore wasn't active before and hasn't been used before, and it always has been, so it is unnecessary to bug the user with a notification. Reported-by: Deepak Khandelwal Suggested-by: Vlad Yasevich Suggested-by: Michael Tuexen Suggested-by: Daniel Borkmann Signed-off-by: Zhu Yanjun Acked-by: Vlad Yasevich Acked-by: Daniel Borkmann Signed-off-by: David S. Miller --- net/sctp/associola.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/net/sctp/associola.c b/net/sctp/associola.c index 7eed77a..0f63396 100644 --- a/net/sctp/associola.c +++ b/net/sctp/associola.c @@ -824,6 +824,7 @@ void sctp_assoc_control_transport(struct sctp_association *asoc, struct sctp_ulpevent *event; struct sockaddr_storage addr; int spc_state = 0; + bool ulp_notify = true; /* Record the transition on the transport. */ switch (command) { @@ -850,6 +851,7 @@ void sctp_assoc_control_transport(struct sctp_association *asoc, else { dst_release(transport->dst); transport->dst = NULL; + ulp_notify = false; } spc_state = SCTP_ADDR_UNREACHABLE; @@ -862,12 +864,14 @@ void sctp_assoc_control_transport(struct sctp_association *asoc, /* Generate and send a SCTP_PEER_ADDR_CHANGE notification to the * user. */ - memset(&addr, 0, sizeof(struct sockaddr_storage)); - memcpy(&addr, &transport->ipaddr, transport->af_specific->sockaddr_len); - event = sctp_ulpevent_make_peer_addr_change(asoc, &addr, + if (ulp_notify) { + memset(&addr, 0, sizeof(struct sockaddr_storage)); + memcpy(&addr, &transport->ipaddr, transport->af_specific->sockaddr_len); + event = sctp_ulpevent_make_peer_addr_change(asoc, &addr, 0, spc_state, error, GFP_ATOMIC); - if (event) - sctp_ulpq_tail_event(&asoc->ulpq, event); + if (event) + sctp_ulpq_tail_event(&asoc->ulpq, event); + } /* Select new active and retran paths. */