• Lukas Wunner's avatar
    spi: Prevent adding devices below an unregistering controller · ddf75be4
    Lukas Wunner authored
    CONFIG_OF_DYNAMIC and CONFIG_ACPI allow adding SPI devices at runtime
    using a DeviceTree overlay or DSDT patch.  CONFIG_SPI_SLAVE allows the
    same via sysfs.
    
    But there are no precautions to prevent adding a device below a
    controller that's being removed.  Such a device is unusable and may not
    even be able to unbind cleanly as it becomes inaccessible once the
    controller has been torn down.  E.g. it is then impossible to quiesce
    the device's interrupt.
    
    of_spi_notify() and acpi_spi_notify() do hold a ref on the controller,
    but otherwise run lockless against spi_unregister_controller().
    
    Fix by holding the spi_add_lock in spi_unregister_controller() and
    bailing out of spi_add_device() if the controller has been unregistered
    concurrently.
    
    Fixes: ce79d54a ("spi/of: Add OF notifier handler")
    Signed-off-by: default avatarLukas Wunner <lukas@wunner.de>
    Cc: stable@vger.kernel.org # v3.19+
    Cc: Geert Uytterhoeven <geert+renesas@glider.be>
    Cc: Octavian Purdila <octavian.purdila@intel.com>
    Cc: Pantelis Antoniou <pantelis.antoniou@konsulko.com>
    Link: https://lore.kernel.org/r/a8c3205088a969dc8410eec1eba9aface60f36af.1596451035.git.lukas@wunner.deSigned-off-by: default avatarMark Brown <broonie@kernel.org>
    ddf75be4
Kconfig 31.1 KB