Skip to content

Commit dbdb442

Browse files
Pei Xiaojic23
authored andcommitted
iio: adc: at91-sama5d2_adc: Fix potential use-after-free in sama5d2_adc driver
at91_adc_interrupt can call at91_adc_touch_data_handler function to start the work by schedule_work(&st->touch_st.workq). If we remove the module which will call at91_adc_remove to make cleanup, it will free indio_dev through iio_device_unregister but quite a bit later. While the work mentioned above will be used. The sequence of operations that may lead to a UAF bug is as follows: CPU0 CPU1 | at91_adc_workq_handler at91_adc_remove | iio_device_unregister(indio_dev) | //free indio_dev a bit later | | iio_push_to_buffers(indio_dev) | //use indio_dev Fix it by ensuring that the work is canceled before proceeding with the cleanup in at91_adc_remove. Fixes: 23ec277 ("iio: adc: at91-sama5d2_adc: add support for position and pressure channels") Signed-off-by: Pei Xiao <xiaopei01@kylinos.cn> Cc: <Stable@vger.kernel.org> Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
1 parent 8f0b4cc commit dbdb442

1 file changed

Lines changed: 1 addition & 0 deletions

File tree

drivers/iio/adc/at91-sama5d2_adc.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2481,6 +2481,7 @@ static void at91_adc_remove(struct platform_device *pdev)
24812481
struct at91_adc_state *st = iio_priv(indio_dev);
24822482

24832483
iio_device_unregister(indio_dev);
2484+
cancel_work_sync(&st->touch_st.workq);
24842485

24852486
at91_adc_dma_disable(st);
24862487

0 commit comments

Comments
 (0)