]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/commit
linuxkpi: Fix __sg_alloc_table_from_pages loop
authorAustin Shafer <ashafer@badland.io>
Fri, 21 Apr 2023 07:56:50 +0000 (09:56 +0200)
committerEmmanuel Vadot <manu@FreeBSD.org>
Fri, 21 Apr 2023 07:56:50 +0000 (09:56 +0200)
commit3f686532c9b4fd603d4ad2d3392232cff24188f4
treee516e6d33fadb2877b0696cb826043434b2a357a
parent9abba78acc2a657f65935352b25b56cb8fe89d03
linuxkpi: Fix __sg_alloc_table_from_pages loop

Commit 3e0856b63fe0e375a0951e05c2ef98bb2ebd9421 updated
__sg_alloc_table_from_pages to use the same API as linux, but modified
the loop condition when going over the pages in a sg list. Part of the
change included moving the sg_next call out of the for loop and into the
body, which causes an off by one error when traversing the list. Since
sg_next is called before the loop body it will skip the first element
and read one past the last element.

This caused panics when running PRIME with nvidia-drm as the off-by-one
issue causes a NULL dereference.

Reviewed by: bz, hselasky
Differential Revision: https://reviews.freebsd.org/D39628
Fixes: 3e0856b63fe0 ("linuxkpi: Fix `sg_alloc_table_from_pages()` to have the same API as Linux")
sys/compat/linuxkpi/common/include/linux/scatterlist.h