From patchwork Tue Jan 2 21:44:38 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marcelo Ricardo Leitner X-Patchwork-Id: 854777 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@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=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="JAmlcN+l"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zB6zd2k27z9sNw for ; Wed, 3 Jan 2018 08:45:01 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1750912AbeABVo5 (ORCPT ); Tue, 2 Jan 2018 16:44:57 -0500 Received: from mail-qt0-f195.google.com ([209.85.216.195]:38443 "EHLO mail-qt0-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750837AbeABVo4 (ORCPT ); Tue, 2 Jan 2018 16:44:56 -0500 Received: by mail-qt0-f195.google.com with SMTP id d4so64748464qtj.5; Tue, 02 Jan 2018 13:44:55 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=4SsX5ltrVxacs4HmsmvJ7AUGNIPsBkSCm+DXAR5UeTc=; b=JAmlcN+l6fOpA1FOmKygMWTGZCJAkTvhRqNPnqwKC8b5vsDd8fpCDSmoeZkgvcsCm1 jw+JcMsPt3HntavthjHpMiQIAghYa01xij3OigSdqikm6nbZhmi6mFGBZnvMbGgmdPCc iO0RkeoS7llh4R+K3gPYRptg2JgUGctw2oSMjgGrxsjcOrKim9L/cSuZWxVPQlh/qmi0 XN9uix03ephdjNZD5nBjYAUgTWyTiW6tbH/e8Ynf1N50ePKkvx8Rl/ryKrsMGCOpmIUK DSeyaCBIagav1ju7mRVv89bYl1d4XHDD9IQY74SIDXx4nGOTmiehiTnyEjvcTcsTGzrN /WDw== 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=4SsX5ltrVxacs4HmsmvJ7AUGNIPsBkSCm+DXAR5UeTc=; b=Uht+JjX9q3x1aoLRekL+fLZ/jMOmRRoG+MWTenVwjSFyOGzu5yXbmBJQ35D8oKGmdl wHK+hLq0Qc40bHaUW9TO1qh3zpImghYPFSmmdaqYuD6JPGVUVZLF2xfdEy7aPHx52WUY x3NWvu0E+Z2sHX6uLdVoYC62dHFTZx7J1lThzT4lpzWBukMiWRUJ7dktTp9YmbNswAQJ sDo4lREot6ZDiz0oe9QYAgfehVj8rV41maY7z80DfAPuDJdJ6oLWaPn6QZ07RtQAZaiN v5yt1lSsDchI37725dTt+L+lHIN/4SIWzQK8DctHHnqf0t1hQn6d7do92oQqOmlfpN1x 4vUw== X-Gm-Message-State: AKGB3mLd3xUVnMbwh8CWCETgBViEmoHisMIwcdwXBlmX4pKG9lWQrjGU b9xWRL1hozp1LCOZxMjX+ARB7naF X-Google-Smtp-Source: ACJfBot5IwSB3hDc9O7jm0lIc+Te13y0YYH64NXeVvkbQl3gKW15BScwFVZd1lCzgFGwoyplsRJl0Q== X-Received: by 10.55.113.135 with SMTP id m129mr62676420qkc.49.1514929495032; Tue, 02 Jan 2018 13:44:55 -0800 (PST) Received: from localhost.localdomain.com ([2001:1284:f013:23a9:9544:d086:4c8e:2344]) by smtp.gmail.com with ESMTPSA id q81sm24462779qkl.13.2018.01.02.13.44.52 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 02 Jan 2018 13:44:54 -0800 (PST) From: Marcelo Ricardo Leitner To: netdev@vger.kernel.org Cc: linux-sctp@vger.kernel.org, Xin Long , Vlad Yasevich , Neil Horman Subject: [PATCH net] sctp: fix handling of ICMP Frag Needed for too small MTUs Date: Tue, 2 Jan 2018 19:44:38 -0200 Message-Id: X-Mailer: git-send-email 2.14.3 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org syzbot reported a hang involving SCTP, on which it kept flooding dmesg with the message: [ 246.742374] sctp: sctp_transport_update_pmtu: Reported pmtu 508 too low, using default minimum of 512 That happened because whenever SCTP hits an ICMP Frag Needed, it tries to adjust to the new MTU and triggers an immediate retransmission. But it didn't consider the fact that MTUs smaller than the SCTP minimum MTU allowed (512) would not cause the PMTU to change, and issued the retransmission anyway (thus leading to another ICMP Frag Needed, and so on). The fix is to disable Path MTU discovery for such transport and to skip the retransmission in such cases. By doing this, SCTP will do the backoff retransmissions as needed and will likely switch to another transport if available. See-also: https://lkml.org/lkml/2017/12/22/811 Reported-by: syzbot Signed-off-by: Marcelo Ricardo Leitner --- net/sctp/input.c | 5 ++++- net/sctp/transport.c | 2 ++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/net/sctp/input.c b/net/sctp/input.c index 621b5ca3fd1c17c3d7ef7bb1c7677ab98cebbe77..a24658c6f181e03d85f12dbe929c8bb4abaefcbd 100644 --- a/net/sctp/input.c +++ b/net/sctp/input.c @@ -412,8 +412,11 @@ void sctp_icmp_frag_needed(struct sock *sk, struct sctp_association *asoc, * Needed will never be sent, but if a message was sent before * PMTU discovery was disabled that was larger than the PMTU, it * would not be fragmented, so it must be re-transmitted fragmented. + * If the new PMTU is invalid, we will keep getting ICMP Frag + * Needed. In this case, simply avoid the retransmit. */ - sctp_retransmit(&asoc->outqueue, t, SCTP_RTXR_PMTUD); + if (pmtu >= SCTP_DEFAULT_MINSEGMENT) + sctp_retransmit(&asoc->outqueue, t, SCTP_RTXR_PMTUD); } void sctp_icmp_redirect(struct sock *sk, struct sctp_transport *t, diff --git a/net/sctp/transport.c b/net/sctp/transport.c index 1e5a22430cf56e40a6f323081beb97836b506384..fbd9fe25764d4d98f93c60a48eccefd9cc6b4165 100644 --- a/net/sctp/transport.c +++ b/net/sctp/transport.c @@ -259,6 +259,8 @@ void sctp_transport_update_pmtu(struct sctp_transport *t, u32 pmtu) * pmtu discovery on this transport. */ t->pathmtu = SCTP_DEFAULT_MINSEGMENT; + t->param_flags = (t->param_flags & ~SPP_PMTUD) | + SPP_PMTUD_DISABLE; } else { t->pathmtu = pmtu; }