Received: by 2002:a25:86ce:0:0:0:0:0 with SMTP id y14csp2175843ybm; Thu, 23 May 2019 12:36:18 -0700 (PDT) X-Google-Smtp-Source: APXvYqyyz+nZXcYQjMTjYqGuVtlEpMb4X0K/fG4s3W37ibPAs3gvcW/zpNVHuXwuXCxeZYi4Uffc X-Received: by 2002:a63:d354:: with SMTP id u20mr51337549pgi.129.1558640178144; Thu, 23 May 2019 12:36:18 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1558640178; cv=none; d=google.com; s=arc-20160816; b=VtACh7hIX3DUAVF//o59SVqOijmv35RYLHoN9aGoB1D6HFcz633540gTe9imRiCLRS oLV+3pZK1PFwFYA4n7IQ8dSd6TS+w12i5jtm/7i66TKs9gQsHTkzhmKMx8sy7fs/tPLF ZdqTRb9Okwel2fkxUpEPrNXBSpZ+mTaDLSlwiayUDZmW8DgQnqBgXNuFIFOzll1pflKx TlYY99GkEQKpgAvvhXTWlJeQQGZvwZ7007Rsz0av/Fy7czj5riqU94Q/h47VFuxVvlHy /bzcxNxzt7M3rQtMCigH7gyJWi3cl7ue+ktYmrUIaATyT4mfH7BnFMVyhAjJf2FGwf4H e4XA== 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=/0NR2RMEfxzAexp9WZhqZ1kT/95Hr6nROQUwouYz5Ek=; b=Btm08RZeSj0AlwtqycqY9S9w9LIzy0d/rWmLmxR8EIkTxMtjmmsleGyLv70koPQhi5 huZgmc27geYzqckI1qRAvyFZbv0XkvOrdn2NWqQnO/WvGy+kjX94SZo74RwP91WPDc/Q 8puj1V5Ftu1/4tIA4g20dN9D5pP/RLlioEWjS25dFDka9Y545O4a6g4QUhNNp7mP3+8i r0a+yJoo+1+ojnVMDhAi/yCoPq3yjXX4T+ELUprMSAlmRnQDL9kY0wGoz5gBwmcgh2PA NR8p+Ck213ATM5UNoTaZZqeTcQROCwd1jYTegC2hAHqYiiBLcAkUyumTWTs5mP5kE1IZ Is/A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=EtGdZlyg; 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 k1si326188pjw.56.2019.05.23.12.36.03; Thu, 23 May 2019 12:36:18 -0700 (PDT) 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=EtGdZlyg; 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 S2391780AbfEWTeF (ORCPT + 99 others); Thu, 23 May 2019 15:34:05 -0400 Received: from mail.kernel.org ([198.145.29.99]:40936 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2390480AbfEWT2U (ORCPT ); Thu, 23 May 2019 15:28:20 -0400 Received: from localhost (83-86-89-107.cable.dynamic.v4.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 1265D2133D; Thu, 23 May 2019 19:28:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1558639699; bh=bN8c66YMo+ds7IH0flsHZO1my5TznSzb5kCnhbmqVKc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=EtGdZlygvqrSdX/0+m7ULYl+TZFGqOVe8VLEMP51JgIyhxjrpqVqrrLpW8dzPVWpL nG/POav5421H6Hbu9aUexzHgsNJI7FHE1Icjg3+pMvb1JAm+wzIYDxVbbFsZOhSlRb S5MgHRRnuKu0fG+lFFsUphlPyfILgn0EhQWtD4cI= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Ronnie Sahlberg , Pavel Shilovsky , Steve French Subject: [PATCH 5.1 046/122] cifs: fix credits leak for SMB1 oplock breaks Date: Thu, 23 May 2019 21:06:08 +0200 Message-Id: <20190523181710.786134323@linuxfoundation.org> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190523181705.091418060@linuxfoundation.org> References: <20190523181705.091418060@linuxfoundation.org> User-Agent: quilt/0.66 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 From: Ronnie Sahlberg commit d69cb728e70c40268762182a62f5d5d6fa51c5b2 upstream. For SMB1 oplock breaks we would grab one credit while sending the PDU but we would never relese the credit back since we will never receive a response to this from the server. Eventuallt this would lead to a hang once all credits are leaked. Fix this by defining a new flag CIFS_NO_SRV_RSP which indicates that there is no server response to this command and thus we need to add any credits back immediately after sending the PDU. CC: Stable #v5.0+ Signed-off-by: Ronnie Sahlberg Reviewed-by: Pavel Shilovsky Signed-off-by: Steve French Signed-off-by: Greg Kroah-Hartman --- fs/cifs/cifsglob.h | 1 + fs/cifs/cifssmb.c | 2 +- fs/cifs/transport.c | 10 +++++----- 3 files changed, 7 insertions(+), 6 deletions(-) --- a/fs/cifs/cifsglob.h +++ b/fs/cifs/cifsglob.h @@ -1687,6 +1687,7 @@ static inline bool is_retryable_error(in #define CIFS_HAS_CREDITS 0x0400 /* already has credits */ #define CIFS_TRANSFORM_REQ 0x0800 /* transform request before sending */ +#define CIFS_NO_SRV_RSP 0x1000 /* there is no server response */ /* Security Flags: indicate type of session setup needed */ #define CIFSSEC_MAY_SIGN 0x00001 --- a/fs/cifs/cifssmb.c +++ b/fs/cifs/cifssmb.c @@ -2540,7 +2540,7 @@ CIFSSMBLock(const unsigned int xid, stru if (lockType == LOCKING_ANDX_OPLOCK_RELEASE) { /* no response expected */ - flags = CIFS_ASYNC_OP | CIFS_OBREAK_OP; + flags = CIFS_NO_SRV_RSP | CIFS_ASYNC_OP | CIFS_OBREAK_OP; pSMB->Timeout = 0; } else if (waitFlag) { flags = CIFS_BLOCKING_OP; /* blocking operation, no timeout */ --- a/fs/cifs/transport.c +++ b/fs/cifs/transport.c @@ -1054,8 +1054,11 @@ compound_send_recv(const unsigned int xi mutex_unlock(&ses->server->srv_mutex); - if (rc < 0) { - /* Sending failed for some reason - return credits back */ + /* + * If sending failed for some reason or it is an oplock break that we + * will not receive a response to - return credits back + */ + if (rc < 0 || (flags & CIFS_NO_SRV_RSP)) { for (i = 0; i < num_rqst; i++) add_credits(ses->server, &credits[i], optype); goto out; @@ -1076,9 +1079,6 @@ compound_send_recv(const unsigned int xi smb311_update_preauth_hash(ses, rqst[0].rq_iov, rqst[0].rq_nvec); - if ((flags & CIFS_TIMEOUT_MASK) == CIFS_ASYNC_OP) - goto out; - for (i = 0; i < num_rqst; i++) { rc = wait_for_response(ses->server, midQ[i]); if (rc != 0)