Received: by 10.192.165.148 with SMTP id m20csp3286356imm; Mon, 23 Apr 2018 04:05:43 -0700 (PDT) X-Google-Smtp-Source: AIpwx48ZQrl9nfglqJvht9DaYsC9q2GC+BJ6fQPAJQXSDXM6/Sukx6v11pPtUrnOtHV6QX67pW3R X-Received: by 2002:a17:902:7795:: with SMTP id o21-v6mr19588671pll.8.1524481543630; Mon, 23 Apr 2018 04:05:43 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1524481543; cv=none; d=google.com; s=arc-20160816; b=F7qOdvE33Tq1rJvknha+o76lweeahCcmcF3GciekqSixruFdtEWsxDLVglcNQ4G4ij ++vIovxv3Xf9DS6gLnR4BNKJVF3BdsaCsKyMcculeuZCwG5ushZu2/xgQIrlcFEN33y3 ABj030EM5ICvxOFjZyh8t3jVx2aRex4dV7+irxz+eg+Om0EG0ugehPGnsWW25f+IE/dx xsqZJJVmf26rAQ5kZaCE89wugDcfbJN1yALo/j0uZCXJRwTkm09sed1NhJJ1k9ZWB+21 E3/ESM5sNRpks7VpyRpH/nB0yChavyMybK5xuhYKpDwh+KrRMhskzLoMHwyEr0t713D4 sP+g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:references:in-reply-to:date :subject:cc:to:from:arc-authentication-results; bh=GJzjGJbE2s5xmxCkWWedqzEXcbBFxvcOJYSsf1+kREQ=; b=f3GoIk2Ju5VpnElphL8WZWD/2A9eLZADV4Kc6RBYDuA7auRT3KAswM0bRg8ExB4zG1 e6GW/yG8/v+rR+EvdvTWtsbhQ7j1fuH0fss11wxj4PKLSDyD7muuMtoPlRyy9/4R5Sgm Kk164VJgnJ9w0LkkMO7UhZN8ULTkzIzK1tlFEo+M7Ev3P4Pjpyqz4gCn1/os4QlDmlgv lcRzmfbgsupy44S0P/Dr3HSe0rSslfNOm+Yk626h2z90JuVNfY7xfcP1/qtkvw9MzZRA HLzuAQWWMgBy99jjQR8i2YUPPPSrmy7YLRVYbm4NjVhrLYkDBUiDJqvPH2knjZVfopHg 4nuw== ARC-Authentication-Results: i=1; mx.google.com; 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=ibm.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id a62si9465037pgc.296.2018.04.23.04.05.29; Mon, 23 Apr 2018 04:05:43 -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; 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=ibm.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755162AbeDWLDr (ORCPT + 99 others); Mon, 23 Apr 2018 07:03:47 -0400 Received: from mx0b-001b2d01.pphosted.com ([148.163.158.5]:47150 "EHLO mx0a-001b2d01.pphosted.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1754707AbeDWLB1 (ORCPT ); Mon, 23 Apr 2018 07:01:27 -0400 Received: from pps.filterd (m0098417.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.0.22/8.16.0.22) with SMTP id w3NAimL5057919 for ; Mon, 23 Apr 2018 07:01:26 -0400 Received: from e33.co.us.ibm.com (e33.co.us.ibm.com [32.97.110.151]) by mx0a-001b2d01.pphosted.com with ESMTP id 2hhcggw053-1 (version=TLSv1.2 cipher=AES256-SHA256 bits=256 verify=NOT) for ; Mon, 23 Apr 2018 07:01:26 -0400 Received: from localhost by e33.co.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Mon, 23 Apr 2018 05:01:25 -0600 Received: from b03cxnp08025.gho.boulder.ibm.com (9.17.130.17) by e33.co.us.ibm.com (192.168.1.133) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Mon, 23 Apr 2018 05:01:22 -0600 Received: from b03ledav001.gho.boulder.ibm.com (b03ledav001.gho.boulder.ibm.com [9.17.130.232]) by b03cxnp08025.gho.boulder.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id w3NB1LvP13107518; Mon, 23 Apr 2018 04:01:21 -0700 Received: from b03ledav001.gho.boulder.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 38F976E03A; Mon, 23 Apr 2018 05:01:21 -0600 (MDT) Received: from tuxmaker.boeblingen.de.ibm.com (unknown [9.152.85.9]) by b03ledav001.gho.boulder.ibm.com (Postfix) with ESMTP id 5551F6E035; Mon, 23 Apr 2018 05:01:19 -0600 (MDT) From: Dong Jia Shi To: linux-kernel@vger.kernel.org, linux-s390@vger.kernel.org, kvm@vger.kernel.org Cc: cohuck@redhat.com, borntraeger@de.ibm.com, bjsdjshi@linux.ibm.com, pasic@linux.ibm.com, pmorel@linux.ibm.com, Halil Pasic , Dong Jia Shi Subject: [PATCH v2 1/5] vfio: ccw: fix cleanup if cp_prefetch fails Date: Mon, 23 Apr 2018 13:01:09 +0200 X-Mailer: git-send-email 2.13.5 In-Reply-To: <20180423110113.59385-1-bjsdjshi@linux.vnet.ibm.com> References: <20180423110113.59385-1-bjsdjshi@linux.vnet.ibm.com> X-TM-AS-GCONF: 00 x-cbid: 18042311-0008-0000-0000-000009A3F047 X-IBM-SpamModules-Scores: X-IBM-SpamModules-Versions: BY=3.00008905; HX=3.00000241; KW=3.00000007; PH=3.00000004; SC=3.00000257; SDB=6.01022058; UDB=6.00521638; IPR=6.00801293; MB=3.00020722; MTD=3.00000008; XFM=3.00000015; UTC=2018-04-23 11:01:23 X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 18042311-0009-0000-0000-000046ECC87C Message-Id: <20180423110113.59385-2-bjsdjshi@linux.vnet.ibm.com> X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:,, definitions=2018-04-23_05:,, signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 malwarescore=0 suspectscore=2 phishscore=0 bulkscore=0 spamscore=0 clxscore=1015 lowpriorityscore=0 impostorscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1709140000 definitions=main-1804230116 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Halil Pasic If the translation of a channel program fails, we may end up attempting to clean up (free, unpin) stuff that never got translated (and allocated, pinned) in the first place. By adjusting the lengths of the chains accordingly (so the element that failed, and all subsequent elements are excluded) cleanup activities based on false assumptions can be avoided. Let's make sure cp_free works properly after cp_prefetch returns with an error by setting ch_len of a ccw chain to the number of the translated CCWs on that chain. Acked-by: Pierre Morel Reviewed-by: Dong Jia Shi Signed-off-by: Halil Pasic Signed-off-by: Dong Jia Shi --- drivers/s390/cio/vfio_ccw_cp.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/drivers/s390/cio/vfio_ccw_cp.c b/drivers/s390/cio/vfio_ccw_cp.c index 2c7550797ec2..62d66e195304 100644 --- a/drivers/s390/cio/vfio_ccw_cp.c +++ b/drivers/s390/cio/vfio_ccw_cp.c @@ -715,6 +715,10 @@ void cp_free(struct channel_program *cp) * and stores the result to ccwchain list. @cp must have been * initialized by a previous call with cp_init(). Otherwise, undefined * behavior occurs. + * For each chain composing the channel program: + * - On entry ch_len holds the count of CCW to be translated. + * - On exit ch_len is adjusted to the count of successfully translated CCW. + * This allows cp_free to find in ch_len the count of CCW to free in a chain. * * The S/390 CCW Translation APIS (prefixed by 'cp_') are introduced * as helpers to do ccw chain translation inside the kernel. Basically @@ -749,11 +753,18 @@ int cp_prefetch(struct channel_program *cp) for (idx = 0; idx < len; idx++) { ret = ccwchain_fetch_one(chain, idx, cp); if (ret) - return ret; + goto out_err; } } return 0; +out_err: + /* Only cleanup the chain elements that were actually translated. */ + chain->ch_len = idx; + list_for_each_entry_continue(chain, &cp->ccwchain_list, next) { + chain->ch_len = 0; + } + return ret; } /** -- 2.13.5