All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] dmaengine: ensure dmaengine helpers check valid callback
@ 2018-05-21 16:56 Fabrizio Castro
  2018-05-21 19:32 ` Greg KH
  0 siblings, 1 reply; 2+ messages in thread
From: Fabrizio Castro @ 2018-05-21 16:56 UTC (permalink / raw)
  To: gregkh
  Cc: Ben Hutchings, Chris Paterson, Biju Das, Fabrizio Castro,
	Jianming Qiao, stable

From: Vinod Koul <vinod.koul@intel.com>

commit 757d12e5849be549076901b0d33c60d5f360269c upstream.

dmaengine has various device callbacks and exposes helper
functions to invoke these. These helpers should check if channel,
device and callback is valid or not before invoking them.

Reported-by: Jon Hunter <jonathanh@nvidia.com>
Signed-off-by: Vinod Koul <vinod.koul@intel.com>
[fabrizio: cherry-pick to 4.4]
Signed-off-by: Fabrizio Castro <fabrizio.castro@bp.renesas.com>
Signed-off-by: Jianming Qiao <jianming.qiao@bp.renesas.com>
---
Hello Greg,

while backporting commit 757d12e5849be549076901b0d33c60d5f360269c
to the CIP kernel Ben recommended to send the same patch to you
for 4.4 stable.
I hope the format of the commit is the one you expect (reference to
the upstream commit, version to cherry-pick the patch to, and
Signed-off-by tags).

Thanks,
Fab

 include/linux/dmaengine.h | 20 +++++++++++++++++++-
 1 file changed, 19 insertions(+), 1 deletion(-)

diff --git a/include/linux/dmaengine.h b/include/linux/dmaengine.h
index c47c68e..a16d185 100644
--- a/include/linux/dmaengine.h
+++ b/include/linux/dmaengine.h
@@ -767,6 +767,9 @@ static inline struct dma_async_tx_descriptor *dmaengine_prep_slave_single(
 	sg_dma_address(&sg) = buf;
 	sg_dma_len(&sg) = len;
 
+	if (!chan || !chan->device || !chan->device->device_prep_slave_sg)
+		return NULL;
+
 	return chan->device->device_prep_slave_sg(chan, &sg, 1,
 						  dir, flags, NULL);
 }
@@ -775,6 +778,9 @@ static inline struct dma_async_tx_descriptor *dmaengine_prep_slave_sg(
 	struct dma_chan *chan, struct scatterlist *sgl,	unsigned int sg_len,
 	enum dma_transfer_direction dir, unsigned long flags)
 {
+	if (!chan || !chan->device || !chan->device->device_prep_slave_sg)
+		return NULL;
+
 	return chan->device->device_prep_slave_sg(chan, sgl, sg_len,
 						  dir, flags, NULL);
 }
@@ -786,6 +792,9 @@ static inline struct dma_async_tx_descriptor *dmaengine_prep_rio_sg(
 	enum dma_transfer_direction dir, unsigned long flags,
 	struct rio_dma_ext *rio_ext)
 {
+	if (!chan || !chan->device || !chan->device->device_prep_slave_sg)
+		return NULL;
+
 	return chan->device->device_prep_slave_sg(chan, sgl, sg_len,
 						  dir, flags, rio_ext);
 }
@@ -796,6 +805,9 @@ static inline struct dma_async_tx_descriptor *dmaengine_prep_dma_cyclic(
 		size_t period_len, enum dma_transfer_direction dir,
 		unsigned long flags)
 {
+	if (!chan || !chan->device || !chan->device->device_prep_dma_cyclic)
+		return NULL;
+
 	return chan->device->device_prep_dma_cyclic(chan, buf_addr, buf_len,
 						period_len, dir, flags);
 }
@@ -804,6 +816,9 @@ static inline struct dma_async_tx_descriptor *dmaengine_prep_interleaved_dma(
 		struct dma_chan *chan, struct dma_interleaved_template *xt,
 		unsigned long flags)
 {
+	if (!chan || !chan->device || !chan->device->device_prep_interleaved_dma)
+		return NULL;
+
 	return chan->device->device_prep_interleaved_dma(chan, xt, flags);
 }
 
@@ -811,7 +826,7 @@ static inline struct dma_async_tx_descriptor *dmaengine_prep_dma_memset(
 		struct dma_chan *chan, dma_addr_t dest, int value, size_t len,
 		unsigned long flags)
 {
-	if (!chan || !chan->device)
+	if (!chan || !chan->device || !chan->device->device_prep_dma_memset)
 		return NULL;
 
 	return chan->device->device_prep_dma_memset(chan, dest, value,
@@ -824,6 +839,9 @@ static inline struct dma_async_tx_descriptor *dmaengine_prep_dma_sg(
 		struct scatterlist *src_sg, unsigned int src_nents,
 		unsigned long flags)
 {
+	if (!chan || !chan->device || !chan->device->device_prep_dma_sg)
+		return NULL;
+
 	return chan->device->device_prep_dma_sg(chan, dst_sg, dst_nents,
 			src_sg, src_nents, flags);
 }
-- 
2.7.4

^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH] dmaengine: ensure dmaengine helpers check valid callback
  2018-05-21 16:56 [PATCH] dmaengine: ensure dmaengine helpers check valid callback Fabrizio Castro
@ 2018-05-21 19:32 ` Greg KH
  0 siblings, 0 replies; 2+ messages in thread
From: Greg KH @ 2018-05-21 19:32 UTC (permalink / raw)
  To: Fabrizio Castro
  Cc: Ben Hutchings, Chris Paterson, Biju Das, Jianming Qiao, stable

On Mon, May 21, 2018 at 05:56:55PM +0100, Fabrizio Castro wrote:
> From: Vinod Koul <vinod.koul@intel.com>
> 
> commit 757d12e5849be549076901b0d33c60d5f360269c upstream.
> 
> dmaengine has various device callbacks and exposes helper
> functions to invoke these. These helpers should check if channel,
> device and callback is valid or not before invoking them.
> 
> Reported-by: Jon Hunter <jonathanh@nvidia.com>
> Signed-off-by: Vinod Koul <vinod.koul@intel.com>
> [fabrizio: cherry-pick to 4.4]
> Signed-off-by: Fabrizio Castro <fabrizio.castro@bp.renesas.com>
> Signed-off-by: Jianming Qiao <jianming.qiao@bp.renesas.com>
> ---
> Hello Greg,
> 
> while backporting commit 757d12e5849be549076901b0d33c60d5f360269c
> to the CIP kernel Ben recommended to send the same patch to you
> for 4.4 stable.
> I hope the format of the commit is the one you expect (reference to
> the upstream commit, version to cherry-pick the patch to, and
> Signed-off-by tags).

Format is fine, but why is this needed in the 4.4.y kernel tree?  What
bug does it solve?

thanks,

greg k-h

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2018-05-21 19:32 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-05-21 16:56 [PATCH] dmaengine: ensure dmaengine helpers check valid callback Fabrizio Castro
2018-05-21 19:32 ` Greg KH

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.