From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753498Ab3KOWaP (ORCPT ); Fri, 15 Nov 2013 17:30:15 -0500 Received: from v094114.home.net.pl ([79.96.170.134]:55039 "HELO v094114.home.net.pl" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with SMTP id S1752745Ab3KOWaL (ORCPT ); Fri, 15 Nov 2013 17:30:11 -0500 From: "Rafael J. Wysocki" To: Olof Johansson Cc: Len Brown , linux-acpi@vger.kernel.org, linux-kernel@vger.kernel.org, Puneet Kumar , Feng Tang Subject: Re: [PATCH] ACPI: Ensure lock is acquired before accessing ec struct members Date: Fri, 15 Nov 2013 23:42:43 +0100 Message-ID: <5300176.cL70lB1Tyt@vostro.rjw.lan> User-Agent: KMail/4.10.5 (Linux/3.12.0-rc6+; KDE/4.10.5; x86_64; ; ) In-Reply-To: <1384544489-18098-1-git-send-email-olof@lixom.net> References: <1384544489-18098-1-git-send-email-olof@lixom.net> MIME-Version: 1.0 Content-Transfer-Encoding: 7Bit Content-Type: text/plain; charset="utf-8" Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Friday, November 15, 2013 11:41:29 AM Olof Johansson wrote: > From: Puneet Kumar > > A bug was introduced by commit b76b51ba0cef ('ACPI / EC: Add more debug > info and trivial code cleanup') that erroneously caused the struct member > to be accessed before acquiring the required lock. This change fixes > it by ensuring the lock acquisition is done first. > > Found by Aaron Durbin > > Fixes: b76b51ba0cef ('ACPI / EC: Add more debug info and trivial code cleanup') > References: http://crbug.com/319019 > Signed-off-by: Puneet Kumar > Reviewed-by: Aaron Durbin > [olof: Commit message reworded a bit] > Signed-off-by: Olof Johansson > Cc: Feng Tang > Cc: # 3.8+ Queued up for the next ACPI pull request, thanks guys! > --- > drivers/acpi/ec.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/drivers/acpi/ec.c b/drivers/acpi/ec.c > index d5309fd..ba5b56d 100644 > --- a/drivers/acpi/ec.c > +++ b/drivers/acpi/ec.c > @@ -173,9 +173,10 @@ static void start_transaction(struct acpi_ec *ec) > static void advance_transaction(struct acpi_ec *ec, u8 status) > { > unsigned long flags; > - struct transaction *t = ec->curr; > + struct transaction *t; > > spin_lock_irqsave(&ec->lock, flags); > + t = ec->curr; > if (!t) > goto unlock; > if (t->wlen > t->wi) { > -- I speak only for myself. Rafael J. Wysocki, Intel Open Source Technology Center.