Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp1774286ybl; Sat, 11 Jan 2020 02:33:12 -0800 (PST) X-Google-Smtp-Source: APXvYqwObgRXMUJyxbpnoO1B03CkgSL3yJqF77LJj59hiMaXxKu3xevnBUdougkAeHgc7X9Om818 X-Received: by 2002:a9d:480b:: with SMTP id c11mr6663657otf.283.1578738792785; Sat, 11 Jan 2020 02:33:12 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1578738792; cv=none; d=google.com; s=arc-20160816; b=zdF3r/iIwQ7chHnku66Efqk5R6715Oz7aoRTIicLCOyjRkI1gDw7YoL5X9JAkIHfZV dm5gn9oSS7rUa6ZbZI1//C9dLwA3VDpqLPHdYJPZYSmj2aiqMA7EgDy7laCur+YZu8Y2 RYr8tYhv/3vcUj06UUGouODFRmY/UiAmO+E2/b1Y4R9qQKcXtITzl/ISzGUYrPrqQugm KM7B4uSItHwZBGne2QQ54PeQz7ka/gEKbAOAUsHI64RLJGNEuzKzL/o+Dyazd006WNE6 I+W1hOgJFTKZfvfZTr1/v/nyyvA8Jb19//97xpFLhFsaWu0IRhxtgRmQXms+BTrUBloC +Txw== 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=3BcLYOkM/B065fAkUd+5/dGZrleSWA7VFGL3dCCRprw=; b=YHth/dm94QKdKmiZNWWOeyHI9BiLWwgmajXGpD/ceiAgWF5yQ2fQZIFYXjAh4+sYO6 riDm2R9xOc/9x9QdEPQc4ONf2aU3X0QjuWD9Wyx+SdKDSNyWMJf/kmImUkq0AhHOdsnp f9ohnD9Nm4d91erp9b6oCMb2FcsyO+zI4ym+cip+3u9vqnqT09Q47T8XSnwldCnCrtge nZJBTTELcJgEWusLybWBaRW2xtxcudx2PjetDTXIt4sWR3F6vGfnrH5Yba9bmlkHjO1M jK173hrkVULzc4tYnha1ItqgSsJZsmFj3ueR4WGDmRrLieAPpRvoVG9sKNz5k3di182G WJGw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=TTXae3iq; 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 d9si590858otf.81.2020.01.11.02.33.01; Sat, 11 Jan 2020 02:33:12 -0800 (PST) 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=TTXae3iq; 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 S1731514AbgAKKbN (ORCPT + 99 others); Sat, 11 Jan 2020 05:31:13 -0500 Received: from mail.kernel.org ([198.145.29.99]:42554 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728901AbgAKKbM (ORCPT ); Sat, 11 Jan 2020 05:31:12 -0500 Received: from localhost (unknown [62.119.166.9]) (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 74A4C2146E; Sat, 11 Jan 2020 10:31:10 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1578738671; bh=M2LHe5QnNlZndOPbv4fl/oy/tZyYqlsTgxfoviEve74=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=TTXae3iqnLH4/Csv1Ntq1TuJvNwkPgKMhXD2NlFaWj8UwXY3AqiKad52pi4yrneDb e3EoivT1nMVxWHCiS4WpfSOct4jLH4Zx/EGV5QRHXWqXAjzYA/EpNkKJhX5N3ZgRIF Lw+aJtXrbgb9TeMr5TuFcFikQRyR/Gqc4LKWmPEo= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Qian Cai , Jan Hoeppner , Stefan Haberland , Jens Axboe , Sasha Levin Subject: [PATCH 5.4 127/165] s390/dasd: fix memleak in path handling error case Date: Sat, 11 Jan 2020 10:50:46 +0100 Message-Id: <20200111094935.208049521@linuxfoundation.org> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200111094921.347491861@linuxfoundation.org> References: <20200111094921.347491861@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: Stefan Haberland [ Upstream commit 00b39f698a4f1ee897227cace2e3937fc4412270 ] If for whatever reason the dasd_eckd_check_characteristics() function exits after at least some paths have their configuration data allocated those data is never freed again. In the error case the device->private pointer is set to NULL and dasd_eckd_uncheck_device() will exit without freeing the path data because of this NULL pointer. Fix by calling dasd_eckd_clear_conf_data() for error cases. Also use dasd_eckd_clear_conf_data() in dasd_eckd_uncheck_device() to avoid code duplication. Reported-by: Qian Cai Reviewed-by: Jan Hoeppner Signed-off-by: Stefan Haberland Signed-off-by: Jens Axboe Signed-off-by: Sasha Levin --- drivers/s390/block/dasd_eckd.c | 19 ++----------------- 1 file changed, 2 insertions(+), 17 deletions(-) diff --git a/drivers/s390/block/dasd_eckd.c b/drivers/s390/block/dasd_eckd.c index f5622f4a2ecf..a28b9ff82378 100644 --- a/drivers/s390/block/dasd_eckd.c +++ b/drivers/s390/block/dasd_eckd.c @@ -2074,7 +2074,7 @@ dasd_eckd_check_characteristics(struct dasd_device *device) dasd_free_block(device->block); device->block = NULL; out_err1: - kfree(private->conf_data); + dasd_eckd_clear_conf_data(device); kfree(device->private); device->private = NULL; return rc; @@ -2083,7 +2083,6 @@ dasd_eckd_check_characteristics(struct dasd_device *device) static void dasd_eckd_uncheck_device(struct dasd_device *device) { struct dasd_eckd_private *private = device->private; - int i; if (!private) return; @@ -2093,21 +2092,7 @@ static void dasd_eckd_uncheck_device(struct dasd_device *device) private->sneq = NULL; private->vdsneq = NULL; private->gneq = NULL; - private->conf_len = 0; - for (i = 0; i < 8; i++) { - kfree(device->path[i].conf_data); - if ((__u8 *)device->path[i].conf_data == - private->conf_data) { - private->conf_data = NULL; - private->conf_len = 0; - } - device->path[i].conf_data = NULL; - device->path[i].cssid = 0; - device->path[i].ssid = 0; - device->path[i].chpid = 0; - } - kfree(private->conf_data); - private->conf_data = NULL; + dasd_eckd_clear_conf_data(device); } static struct dasd_ccw_req * -- 2.20.1