Received: by 10.213.65.68 with SMTP id h4csp892579imn; Tue, 20 Mar 2018 19:11:21 -0700 (PDT) X-Google-Smtp-Source: AG47ELsoOhCUWxqxCGWfqWGu7gAH3RfXk5Z3uXw+VmQWMSwzIQqhufN0q/SSne7CNpLttOx364JX X-Received: by 2002:a17:902:3124:: with SMTP id w33-v6mr19363109plb.119.1521598281507; Tue, 20 Mar 2018 19:11:21 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1521598281; cv=none; d=google.com; s=arc-20160816; b=jhr46yXywEIvCzGksVvcdzEopL3khiCgpKX2oVtV9ofh9YgFOJ3ZHv3d8AA+zPmHtB X4Acfb6VmBqdD1+E8H10zie903zRpVK1bzSF+JXGj1yk0m69n0r+l7FukDYLd9YiUmce ZfOb4C8S7J4Ro3qU2Ybd/Lww8T212G2GCSwee5rVDh+AGkWlgyGz2JV/2RWAH66UE468 BFq74MOnXAPVLas8DHgFaq1mFFDWVqGMtqetBL+qSBvvHzeLyeK/GKSE59seDfuQtaFo 2m4OB21BO9pyyo755/gvAO+6SVxGpBo2/maOGvdnaPwksgGryqAa9BwPqq8dEf8O2gFM XONQ== 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=TIbTFtP+xrqcxs1yqy7M5gxgyN7bVlJofUxhdjufY1w=; b=yrXUYQcCw3UTgpOzIfrcOGXQYJh3IW3YTNgWoNeWcOTHgPL7tY1xFj9kCjtoMhGn65 W444GeS4TJLJ4oounIBraDtyI54dYvIN/ABZn2gEL77UrdJzlpN8gNBAX9jKEXQRT5/K qdQRPDyS2hAh9/AZzijaNEF4i238MtZ4dR1t1zeTuvJd105W3taC+siU/xPqTroLpQxv 3yyYboSv9t/dNXTMV7OSc4j3Gwk65UgHHtfijZrSEP+Y5ytH5LQXyuvRXMMSJNE8+GrK okbkadUjcHdk4zXTlgDx1kHqujRLdpjyGifqia5+8RcTwVZiTUjFJ2ANSI1DQIr162dY QPhQ== 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 v25si2245197pfk.376.2018.03.20.19.11.07; Tue, 20 Mar 2018 19:11:21 -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 S1752041AbeCUCJj (ORCPT + 99 others); Tue, 20 Mar 2018 22:09:39 -0400 Received: from mx0a-001b2d01.pphosted.com ([148.163.156.1]:39880 "EHLO mx0a-001b2d01.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751521AbeCUCIc (ORCPT ); Tue, 20 Mar 2018 22:08:32 -0400 Received: from pps.filterd (m0098399.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.0.22/8.16.0.22) with SMTP id w2L28DLj125077 for ; Tue, 20 Mar 2018 22:08:32 -0400 Received: from e38.co.us.ibm.com (e38.co.us.ibm.com [32.97.110.159]) by mx0a-001b2d01.pphosted.com with ESMTP id 2gue550dff-1 (version=TLSv1.2 cipher=AES256-SHA256 bits=256 verify=NOT) for ; Tue, 20 Mar 2018 22:08:32 -0400 Received: from localhost by e38.co.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Tue, 20 Mar 2018 20:08:31 -0600 Received: from b03cxnp08025.gho.boulder.ibm.com (9.17.130.17) by e38.co.us.ibm.com (192.168.1.138) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Tue, 20 Mar 2018 20:08:29 -0600 Received: from b03ledav003.gho.boulder.ibm.com (b03ledav003.gho.boulder.ibm.com [9.17.130.234]) by b03cxnp08025.gho.boulder.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id w2L28SxH13894092; Tue, 20 Mar 2018 19:08:28 -0700 Received: from b03ledav003.gho.boulder.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id A494F6A03B; Tue, 20 Mar 2018 20:08:28 -0600 (MDT) Received: from tuxmaker.boeblingen.de.ibm.com (unknown [9.152.85.9]) by b03ledav003.gho.boulder.ibm.com (Postfix) with ESMTP id 3EE716A03F; Tue, 20 Mar 2018 20:08:27 -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.vnet.ibm.com, pasic@linux.vnet.ibm.com, pmorel@linux.vnet.ibm.com Subject: [PATCH 1/4] vfio: ccw: fix cleanup if cp_prefetch fails Date: Wed, 21 Mar 2018 03:08:19 +0100 X-Mailer: git-send-email 2.13.5 In-Reply-To: <20180321020822.86255-1-bjsdjshi@linux.vnet.ibm.com> References: <20180321020822.86255-1-bjsdjshi@linux.vnet.ibm.com> X-TM-AS-GCONF: 00 x-cbid: 18032102-0028-0000-0000-000009544C9D X-IBM-SpamModules-Scores: X-IBM-SpamModules-Versions: BY=3.00008713; HX=3.00000241; KW=3.00000007; PH=3.00000004; SC=3.00000254; SDB=6.01006058; UDB=6.00512229; IPR=6.00785341; MB=3.00020153; MTD=3.00000008; XFM=3.00000015; UTC=2018-03-21 02:08:30 X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 18032102-0029-0000-0000-00003A0C01A0 Message-Id: <20180321020822.86255-2-bjsdjshi@linux.vnet.ibm.com> X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:,, definitions=2018-03-21_01:,, 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-1803210024 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 to 0 for the ccw chains those are not prefetched. 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 | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/drivers/s390/cio/vfio_ccw_cp.c b/drivers/s390/cio/vfio_ccw_cp.c index d9a2fffd034b..2be114db02f9 100644 --- a/drivers/s390/cio/vfio_ccw_cp.c +++ b/drivers/s390/cio/vfio_ccw_cp.c @@ -749,11 +749,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 where 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