linuxkpi: Fix return value of dma_map_sgtable
dma_map_sgtable internally uses the dma_map_sg_attrs helper. The problem is
that dma_map_sg_attrs returns the number of entries mapped, whereas
dma_map_sgtable returns nonzero on failure. This leads to dma_map_sgtable
returning non-zero-but-positive values which tricks other areas of the stack
into thinking nents is a valid pointer.
This checks if nents is valid and returns zero if so, updating the nents field
in sgt. This fixes PRIME render offload with nvidia-drm.
Fixes: 9202c95f47
("linuxkpi: Add dma_{un,}map_sgtable")
This commit is contained in:
parent
b972e7cbb4
commit
4085bde9fa
@ -362,7 +362,14 @@ dma_map_sgtable(struct device *dev, struct sg_table *sgt,
|
||||
unsigned long attrs)
|
||||
{
|
||||
|
||||
return (dma_map_sg_attrs(dev, sgt->sgl, sgt->nents, dir, attrs));
|
||||
int nents = dma_map_sg_attrs(dev, sgt->sgl, sgt->nents, dir, attrs);
|
||||
|
||||
if (nents < 0) {
|
||||
return nents;
|
||||
} else {
|
||||
sgt->nents = nents;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
static inline void
|
||||
|
Loading…
Reference in New Issue
Block a user