Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751730AbdIAJiv (ORCPT ); Fri, 1 Sep 2017 05:38:51 -0400 Received: from smtp105.ord1c.emailsrvr.com ([108.166.43.105]:57791 "EHLO smtp105.ord1c.emailsrvr.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751515AbdIAJiu (ORCPT ); Fri, 1 Sep 2017 05:38:50 -0400 X-Auth-ID: siepeng@mev.co.uk X-Sender-Id: siepeng@mev.co.uk Subject: Re: [PATCH 26/31] staging/comedi/das16: Make timer initialization unconditional From: Ian Abbott To: Kees Cook , Thomas Gleixner Cc: H Hartley Sweeten , Greg Kroah-Hartman , devel@driverdev.osuosl.org, linux-kernel@vger.kernel.org References: <1504222183-61202-1-git-send-email-keescook@chromium.org> <1504222183-61202-27-git-send-email-keescook@chromium.org> <5d865f87-4aa5-6a72-ce8a-c0232b362adc@mev.co.uk> Message-ID: Date: Fri, 1 Sep 2017 10:38:47 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.2.1 MIME-Version: 1.0 In-Reply-To: <5d865f87-4aa5-6a72-ce8a-c0232b362adc@mev.co.uk> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-GB Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2352 Lines: 60 On 01/09/17 10:29, Ian Abbott wrote: > On 01/09/17 00:29, Kees Cook wrote: >> With timer initialization made unconditional, there is no reason to >> make del_timer_sync() calls conditionally, there by removing the test >> of the .data field. >> >> Cc: Ian Abbott >> Cc: H Hartley Sweeten >> Cc: Greg Kroah-Hartman >> Cc: devel@driverdev.osuosl.org >> Signed-off-by: Kees Cook >> --- >> drivers/staging/comedi/drivers/das16.c | 9 +++------ >> 1 file changed, 3 insertions(+), 6 deletions(-) >> >> diff --git a/drivers/staging/comedi/drivers/das16.c >> b/drivers/staging/comedi/drivers/das16.c >> index 5d157951f63f..4514179b2007 100644 >> --- a/drivers/staging/comedi/drivers/das16.c >> +++ b/drivers/staging/comedi/drivers/das16.c >> @@ -941,10 +941,8 @@ static void das16_alloc_dma(struct comedi_device >> *dev, unsigned int dma_chan) >> /* DMA uses two buffers */ >> devpriv->dma = comedi_isadma_alloc(dev, 2, dma_chan, dma_chan, >> DAS16_DMA_SIZE, COMEDI_ISADMA_READ); >> - if (devpriv->dma) { >> - setup_timer(&devpriv->timer, das16_timer_interrupt, >> - (unsigned long)dev); >> - } >> + setup_timer(&devpriv->timer, das16_timer_interrupt, >> + (unsigned long)dev); >> } > > das16_alloc_dma() returns before the call to comedi_isadma_alloc() if > the dma_chan parameter is not one of the values 1 or 3, so setup_timer() > will not be called in that case. > >> static void das16_free_dma(struct comedi_device *dev) >> @@ -952,8 +950,7 @@ static void das16_free_dma(struct comedi_device *dev) >> struct das16_private_struct *devpriv = dev->private; >> if (devpriv) { >> - if (devpriv->timer.data) >> - del_timer_sync(&devpriv->timer); >> + del_timer_sync(&devpriv->timer); > > If setup_timer() has not been called (see remark above), this change > will break. > >> comedi_isadma_free(devpriv->dma); >> } >> } >> If you want to avoid testing devpriv->timer.data for some reason, you could make the calls to setup_timer() and del_timer_sync() depend on devpriv->dma. -- -=( Ian Abbott @ MEV Ltd. E-mail: )=- -=( Web: http://www.mev.co.uk/ )=-