diff options
author | Takashi Iwai <[email protected]> | 2017-08-25 12:04:07 +0200 |
---|---|---|
committer | Mark Brown <[email protected]> | 2017-09-27 10:08:52 -0700 |
commit | 5d61f0ba6524dcbad198126e5793157c8afdea91 (patch) | |
tree | 279819f50b58c4c38efb13f3a41414354ecdb05d /lib/test_overflow.c | |
parent | 2bd6bf03f4c1c59381d62c61d03f6cc3fe71f66e (diff) |
ASoC: pcm: Sync delayed work before releasing resources
When ASoC driver is unbound dynamically during its operation (i.e. a
kind of hot-unplug), we may hit Oops due to the resource access after
the release by a delayed work, something like:
Unable to handle kernel paging request at virtual address dead000000000220
....
PC is at soc_dapm_dai_stream_event.isra.14+0x20/0xd0
LR is at snd_soc_dapm_stream_event+0x74/0xa8
....
[<ffff000008715610>] soc_dapm_dai_stream_event.isra.14+0x20/0xd0
[<ffff00000871989c>] snd_soc_dapm_stream_event+0x74/0xa8
[<ffff00000871b23c>] close_delayed_work+0x3c/0x50
[<ffff0000080bbd6c>] process_one_work+0x1ac/0x318
[<ffff0000080bbf20>] worker_thread+0x48/0x420
[<ffff0000080c201c>] kthread+0xfc/0x128
[<ffff0000080842f0>] ret_from_fork+0x10/0x18
For fixing the race, this patch adds a sync-point in pcm private_free
callback to finish the delayed work before actually releasing the
resources.
Reported-by: Hiep Cao Minh <[email protected]>
Reported-by: Kuninori Morimoto <[email protected]>
Tested-by: Kuninori Morimoto <[email protected]>
Signed-off-by: Takashi Iwai <[email protected]>
Signed-off-by: Mark Brown <[email protected]>
Diffstat (limited to 'lib/test_overflow.c')
0 files changed, 0 insertions, 0 deletions