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:
Austin Shafer 2022-12-06 16:25:53 +01:00 committed by Emmanuel Vadot
parent b972e7cbb4
commit 4085bde9fa

View File

@ -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