lkml.org 
[lkml]   [2012]   [Aug]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[RFC PATCH] spi/bcm63xx: Ensure that memory is freed only after it is no longer used
    Date
    The call to spi_unregister_master() in the device remove function frees device
    memory, and with it any device local data. However, device local data is still
    accessed after the call to spi_unregister_master().

    Acquire a reference to the SPI device and release it after cleanup is complete
    to solve the problem.

    Cc: Florian Fainelli <florian@openwrt.org>
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    ---
    Several drivers have this problem, and I am trying to find a common fix.

    This solution is modeled after the approach used in spi-txx9spi:txx9spi_remove.
    The other possible fix would be to move spi_unregister_master() to the end of
    bcm63xx_spi_remove(), but I am not sure if it is a good idea to clean up
    before the call to spi_unregister_master().

    drivers/spi/spi-bcm63xx.c | 4 +++-
    1 file changed, 3 insertions(+), 1 deletion(-)

    diff --git a/drivers/spi/spi-bcm63xx.c b/drivers/spi/spi-bcm63xx.c
    index 6e25ef1..ea0aaa3 100644
    --- a/drivers/spi/spi-bcm63xx.c
    +++ b/drivers/spi/spi-bcm63xx.c
    @@ -438,7 +438,7 @@ out:

    static int __devexit bcm63xx_spi_remove(struct platform_device *pdev)
    {
    - struct spi_master *master = platform_get_drvdata(pdev);
    + struct spi_master *master = spi_master_get(platform_get_drvdata(pdev));
    struct bcm63xx_spi *bs = spi_master_get_devdata(master);

    spi_unregister_master(master);
    @@ -452,6 +452,8 @@ static int __devexit bcm63xx_spi_remove(struct platform_device *pdev)

    platform_set_drvdata(pdev, 0);

    + spi_master_put(master);
    +
    return 0;
    }

    --
    1.7.9.7


    \
     
     \ /
      Last update: 2012-08-10 23:22    [W:0.022 / U:30.948 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site