Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 944ea4dd authored by Jon Mason's avatar Jon Mason Committed by Vinod Koul
Browse files

dmatest: Fix NULL pointer dereference on ioat



device_control is an optional and not implemented in all DMA drivers.
Any calls to these will result in a NULL pointer dereference.  dmatest
makes two of these calls when completing the kernel thread and removing
the module.  These are corrected by calling the dmaengine_device_control
wrapper and checking for a non-existant device_control function pointer
there.

Signed-off-by: default avatarJon Mason <jon.mason@intel.com>
CC: Vinod Koul <vinod.koul@intel.com>
CC: Dan Williams <djbw@fb.com>
Reviewed-by: default avatarViresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: default avatarVinod Koul <vinod.koul@linux.intel.com>
parent e4d43c17
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -536,7 +536,7 @@ static int dmatest_func(void *data)
			thread_name, total_tests, failed_tests, ret);

	/* terminate all transfers on specified channels */
	chan->device->device_control(chan, DMA_TERMINATE_ALL, 0);
	dmaengine_terminate_all(chan);
	if (iterations > 0)
		while (!kthread_should_stop()) {
			DECLARE_WAIT_QUEUE_HEAD_ONSTACK(wait_dmatest_exit);
@@ -561,7 +561,7 @@ static void dmatest_cleanup_channel(struct dmatest_chan *dtc)
	}

	/* terminate all transfers on specified channels */
	dtc->chan->device->device_control(dtc->chan, DMA_TERMINATE_ALL, 0);
	dmaengine_terminate_all(dtc->chan);

	kfree(dtc);
}
+4 −1
Original line number Diff line number Diff line
@@ -608,7 +608,10 @@ static inline int dmaengine_device_control(struct dma_chan *chan,
					   enum dma_ctrl_cmd cmd,
					   unsigned long arg)
{
	if (chan->device->device_control)
		return chan->device->device_control(chan, cmd, arg);
	else
		return -ENOSYS;
}

static inline int dmaengine_slave_config(struct dma_chan *chan,