From patchwork Fri Mar 29 11:54:55 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Woodhouse X-Patchwork-Id: 232375 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 20EC02C00C5 for ; Fri, 29 Mar 2013 22:55:04 +1100 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753749Ab3C2LzB (ORCPT ); Fri, 29 Mar 2013 07:55:01 -0400 Received: from merlin.infradead.org ([205.233.59.134]:40462 "EHLO merlin.infradead.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751638Ab3C2LzA (ORCPT ); Fri, 29 Mar 2013 07:55:00 -0400 Received: from i7.infradead.org ([2001:8b0:10b:1:225:64ff:fee8:e9df]) by merlin.infradead.org with esmtpsa (Exim 4.80.1 #2 (Red Hat Linux)) id 1ULXta-00070g-JL; Fri, 29 Mar 2013 11:54:58 +0000 Message-ID: <1364558095.14860.59.camel@i7.infradead.org> Subject: [PATCH] libata: fix DMA to stack in reading devslp_timing parameters From: David Woodhouse To: Shane Huang Cc: Jeff Garzik , linux-ide@vger.kernel.org Date: Fri, 29 Mar 2013 11:54:55 +0000 X-Mailer: Evolution 3.6.3 (3.6.3-2.fc18) Mime-Version: 1.0 X-SRS-Rewrite: SMTP reverse-path rewritten from by merlin.infradead.org See http://www.infradead.org/rpr.html Sender: linux-ide-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-ide@vger.kernel.org Commit 803739d25c2343da6d2f95eebdcbc08bf67097d4 ("[libata] replace sata_settings with devslp_timing"), which was also Cc: stable, used a stack buffer to receive data from ata_read_log_page(), which triggers the following warning: ahci 0000:00:1f.2: DMA-API: device driver maps memory fromstack [addr=ffff880140469948] Fix this by using ap->sector_buf instead of a stack buffer. Signed-off-by: David Woodhouse Cc: stable@kernel.org --- I'm somewhat ignorant, but it looks like this is kind of thing is what ap->sector_buf is *for*, right? And in ata_dev_configure() nobody else is likely to be using it? diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c index 497adea..b1160ee 100644 --- a/drivers/ata/libata-core.c +++ b/drivers/ata/libata-core.c @@ -2329,7 +2329,7 @@ int ata_dev_configure(struct ata_device *dev) * from SATA Settings page of Identify Device Data Log. */ if (ata_id_has_devslp(dev->id)) { - u8 sata_setting[ATA_SECT_SIZE]; + u8 *sata_setting = ap->sector_buf; int i, j; dev->flags |= ATA_DFLAG_DEVSLP;