From patchwork Fri Jan 12 14:42:06 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: r.hering@avm.de X-Patchwork-Id: 859979 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=) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zJ57H4Jslz9sNw for ; Sat, 13 Jan 2018 01:42:19 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933866AbeALOmP (ORCPT ); Fri, 12 Jan 2018 09:42:15 -0500 Received: from mail.avm.de ([212.42.244.120]:50642 "EHLO mail.avm.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933757AbeALOmO (ORCPT ); Fri, 12 Jan 2018 09:42:14 -0500 Received: from mail-notes.avm.de (mail-notes.avm.de [172.16.0.1]) by mail.avm.de (8.15.2/8.15.2/Debian-3) with ESMTP id w0CEg7b1015349; Fri, 12 Jan 2018 15:42:08 +0100 Received: from EmbeddedVM.avm.de ([172.16.66.2]) by mail-notes.avm.de (IBM Domino Release 9.0.1FP9HF140) with SMTP id 2018011215420583-8194 ; Fri, 12 Jan 2018 15:42:05 +0100 Received: by EmbeddedVM.avm.de (sSMTP sendmail emulation); Fri, 12 Jan 2018 15:42:06 +0100 Date: Fri, 12 Jan 2018 15:42:06 +0100 To: davem@davemloft.net, netdev@vger.kernel.org Subject: [PATCH] net/tls: Fix inverted error codes to avoid endless loop From: r.hering@avm.de X-MIMETrack: Itemize by SMTP Server on ANIS1/AVM(Release 9.0.1FP9HF140 | October 6, 2017) at 12.01.2018 15:42:06, Serialize by Router on ANIS1/AVM(Release 9.0.1FP9HF140 | October 6, 2017) at 12.01.2018 15:42:08, Serialize complete at 12.01.2018 15:42:08 X-TNEFEvaluated: 1 Message-ID: X-purgate-type: clean X-purgate-Ad: Categorized by eleven eXpurgate (R) http://www.eleven.de X-purgate: clean X-purgate: This mail is considered clean (visit http://www.eleven.de for further information) X-purgate-size: 1327 X-purgate-ID: 149429::1515768128-00005265-8E56018D/0/0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org sendfile() calls can hang endless with using Kernel TLS if a socket error occurs. Socket error codes must be inverted by Kernel TLS before returning because they are stored with positive sign. If returned non-inverted they are interpreted as number of bytes sent, causing endless looping of the splice mechanic behind sendfile(). Signed-off-by: Robert Hering diff --git a/include/net/tls.h b/include/net/tls.h index 936cfc5..9185e53 100644 --- a/include/net/tls.h +++ b/include/net/tls.h @@ -170,7 +170,7 @@ static inline bool tls_is_pending_open_record(struct tls_context *tls_ctx) static inline void tls_err_abort(struct sock *sk) { - sk->sk_err = -EBADMSG; + sk->sk_err = EBADMSG; sk->sk_error_report(sk); } diff --git a/net/tls/tls_sw.c b/net/tls/tls_sw.c index 73d1921..9773571 100644 --- a/net/tls/tls_sw.c +++ b/net/tls/tls_sw.c @@ -391,7 +391,7 @@ int tls_sw_sendmsg(struct sock *sk, struct msghdr *msg, size_t size) while (msg_data_left(msg)) { if (sk->sk_err) { - ret = sk->sk_err; + ret = -sk->sk_err; goto send_end; } @@ -544,7 +544,7 @@ int tls_sw_sendpage(struct sock *sk, struct page *page, size_t copy, required_size; if (sk->sk_err) { - ret = sk->sk_err; + ret = -sk->sk_err; goto sendpage_end; }