From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932302AbcIFDaQ (ORCPT ); Mon, 5 Sep 2016 23:30:16 -0400 Received: from aserp1040.oracle.com ([141.146.126.69]:29656 "EHLO aserp1040.oracle.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753550AbcIFDaP (ORCPT ); Mon, 5 Sep 2016 23:30:15 -0400 Subject: Re: [PATCH] speakup: Add spinlock in synth_direct_store To: Pavel Andrianov , Samuel Thibault References: <1473081467-1892-1-git-send-email-andrianov@ispras.ru> Cc: William Hubbs , Chris Brannon , Kirk Reiser , Greg Kroah-Hartman , Shraddha Barke , Dilek Uzulmez , speakup@linux-speakup.org, devel@driverdev.osuosl.org, linux-kernel@vger.kernel.org, ldv-project@linuxtesting.org From: Vaishali Thakkar Message-ID: <57CE381E.9050805@oracle.com> Date: Tue, 6 Sep 2016 08:59:34 +0530 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.4.0 MIME-Version: 1.0 In-Reply-To: <1473081467-1892-1-git-send-email-andrianov@ispras.ru> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit X-Source-IP: aserv0022.oracle.com [141.146.126.234] Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Monday 05 September 2016 06:47 PM, Pavel Andrianov wrote: > All operations with synth buffer should be protected, > as there are global pointers, which should be modified atomically. > > Found by Linux Driver Verification project (linuxtesting.org) > > Signed-off-by: Pavel Andrianov Acked-by: Vaishali Thakkar > --- > drivers/staging/speakup/kobjects.c | 3 +++ > 1 file changed, 3 insertions(+) > > diff --git a/drivers/staging/speakup/kobjects.c b/drivers/staging/speakup/kobjects.c > index 528cbdc..7fedee3 100644 > --- a/drivers/staging/speakup/kobjects.c > +++ b/drivers/staging/speakup/kobjects.c > @@ -411,11 +411,13 @@ static ssize_t synth_direct_store(struct kobject *kobj, > int len; > int bytes; > const char *ptr = buf; > + unsigned long flags; > > if (!synth) > return -EPERM; > > len = strlen(buf); > + spin_lock_irqsave(&speakup_info.spinlock, flags); > while (len > 0) { > bytes = min_t(size_t, len, 250); > strncpy(tmp, ptr, bytes); > @@ -425,6 +427,7 @@ static ssize_t synth_direct_store(struct kobject *kobj, > ptr += bytes; > len -= bytes; > } > + spin_unlock_irqrestore(&speakup_info.spinlock, flags); > return count; > } > > -- Vaishali