From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1030408AbcIWKGn (ORCPT ); Fri, 23 Sep 2016 06:06:43 -0400 Received: from mx0a-001b2d01.pphosted.com ([148.163.156.1]:58356 "EHLO mx0a-001b2d01.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S938786AbcIWKGk (ORCPT ); Fri, 23 Sep 2016 06:06:40 -0400 Date: Fri, 23 Sep 2016 12:06:31 +0200 (CEST) From: Sebastian Ott X-X-Sender: sebott@schleppi To: Frank Haverkamp cc: Greg Kroah-Hartman , linux-kernel@vger.kernel.org Subject: Re: [PATCH] misc/genwqe: ensure zero initialization In-Reply-To: <90EFC938-72B5-4D63-84C0-13E3BB2D3184@linux.vnet.ibm.com> References: <90EFC938-72B5-4D63-84C0-13E3BB2D3184@linux.vnet.ibm.com> User-Agent: Alpine 2.20 (LFD 67 2015-01-07) Organization: =?ISO-8859-15?Q?=22IBM_Deutschland_Research_&_Development_GmbH_=2F_Vorsitzende_des_Aufsichtsrats=3A_Martina_Koederitz_Gesch=E4ftsf=FChrung=3A_Dirk_Wittkopp_Sitz_der_Gesellschaft=3A_B=F6blingen_=2F_Registergericht?= =?ISO-8859-15?Q?=3A_Amtsgericht_Stuttgart=2C_HRB_243294=22?= MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII X-TM-AS-MML: disable X-Content-Scanned: Fidelis XPS MAILER x-cbid: 16092310-0012-0000-0000-000004630EDE X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 16092310-0013-0000-0000-0000158E584E Message-Id: X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:,, definitions=2016-09-23_04:,, signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 suspectscore=11 malwarescore=0 phishscore=0 adultscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1609020000 definitions=main-1609230187 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, 22 Sep 2016, Frank Haverkamp wrote: > > On 12.09.2016, at 20:09, Sebastian Ott wrote: > > Genwqe uses dma_alloc_coherent and depends on zero initialized memory. On > > one occasion it ueses an explicit memset on others it uses un-initialized > > memory. > > > > This bug was covered because some archs actually return zero initialized > > memory when using dma_alloc_coherent but this is by no means guaranteed. > > Simply switch to dma_zalloc_coherent. > > Thanks for figuring this out. I hope you found all spots where this misassumption is done. Genwqe only uses the dma alloc API via a wrapper (__genwqe_alloc_consistent) and I changed it there. > I think this should be fine. > > Signed-off-by: Frank Haverkamp I changed that into an Ack. Seems more fitting here. Also I fixed a typo in the patch description. Greg, would you please take this one via your drivers/misc tree. Thanks, Sebastian -------->8 misc/genwqe: ensure zero initialization Genwqe uses dma_alloc_coherent and depends on zero initialized memory. On one occasion it uses an explicit memset on others it uses un-initialized memory. This bug was covered because some archs actually return zero initialized memory when using dma_alloc_coherent but this is by no means guaranteed. Simply switch to dma_zalloc_coherent. Signed-off-by: Sebastian Ott Acked-by: Frank Haverkamp --- drivers/misc/genwqe/card_ddcb.c | 2 -- drivers/misc/genwqe/card_utils.c | 4 ++-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/drivers/misc/genwqe/card_ddcb.c b/drivers/misc/genwqe/card_ddcb.c index 353ee0c..ddfeefe 100644 --- a/drivers/misc/genwqe/card_ddcb.c +++ b/drivers/misc/genwqe/card_ddcb.c @@ -1048,8 +1048,6 @@ static int setup_ddcb_queue(struct genwqe_dev *cd, struct ddcb_queue *queue) "[%s] **err: could not allocate DDCB **\n", __func__); return -ENOMEM; } - memset(queue->ddcb_vaddr, 0, queue_size); - queue->ddcb_req = kzalloc(sizeof(struct ddcb_requ *) * queue->ddcb_max, GFP_KERNEL); if (!queue->ddcb_req) { diff --git a/drivers/misc/genwqe/card_utils.c b/drivers/misc/genwqe/card_utils.c index 222367c..8a679ec 100644 --- a/drivers/misc/genwqe/card_utils.c +++ b/drivers/misc/genwqe/card_utils.c @@ -220,8 +220,8 @@ void *__genwqe_alloc_consistent(struct genwqe_dev *cd, size_t size, if (get_order(size) > MAX_ORDER) return NULL; - return dma_alloc_coherent(&cd->pci_dev->dev, size, dma_handle, - GFP_KERNEL); + return dma_zalloc_coherent(&cd->pci_dev->dev, size, dma_handle, + GFP_KERNEL); } void __genwqe_free_consistent(struct genwqe_dev *cd, size_t size, -- 2.5.5