]> git.ipfire.org Git - thirdparty/kernel/stable.git/commit
dmaengine: dmatest: move callback wait queue to thread context
authorAdam Wallis <awallis@codeaurora.org>
Mon, 27 Nov 2017 15:45:01 +0000 (10:45 -0500)
committerSasha Levin <alexander.levin@microsoft.com>
Wed, 17 Jan 2018 17:55:31 +0000 (12:55 -0500)
commit6b92b07e2cb0e90327f03928cadfcbb625d33378
tree599f6ab33de75c6bb0bb8f1b7221819127c614fc
parent412551c467675878bbf55667e478da7cddcd66a4
dmaengine: dmatest: move callback wait queue to thread context

[ Upstream commit 6f6a23a213be51728502b88741ba6a10cda2441d ]

Commit adfa543e7314 ("dmatest: don't use set_freezable_with_signal()")
introduced a bug (that is in fact documented by the patch commit text)
that leaves behind a dangling pointer. Since the done_wait structure is
allocated on the stack, future invocations to the DMATEST can produce
undesirable results (e.g., corrupted spinlocks).

Commit a9df21e34b42 ("dmaengine: dmatest: warn user when dma test times
out") attempted to WARN the user that the stack was likely corrupted but
did not fix the actual issue.

This patch fixes the issue by pushing the wait queue and callback
structs into the the thread structure. If a failure occurs due to time,
dmaengine_terminate_all will force the callback to safely call
wake_up_all() without possibility of using a freed pointer.

Cc: stable@vger.kernel.org
Bug: https://bugzilla.kernel.org/show_bug.cgi?id=197605
Fixes: adfa543e7314 ("dmatest: don't use set_freezable_with_signal()")
Reviewed-by: Sinan Kaya <okaya@codeaurora.org>
Suggested-by: Shunyong Yang <shunyong.yang@hxt-semitech.com>
Signed-off-by: Adam Wallis <awallis@codeaurora.org>
Signed-off-by: Vinod Koul <vinod.koul@intel.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
drivers/dma/dmatest.c