powerpc/booke: Only check for hugetlb in flush if vma != NULL
And in flush_hugetlb_page(), don't check whether vma is NULL after we've already dereferenced it. This was found by Dan using static analysis as described here: https://lists.ozlabs.org/pipermail/linuxppc-dev/2013-November/113161.html We currently get away with this because the callers that currently pass NULL for vma seem to be 32-bit-only (e.g. highmem, and CONFIG_DEBUG_PGALLOC in pgtable_32.c) Hugetlb is currently 64-bit only, so we never saw a NULL vma here. Signed-off-by: Scott Wood <scottwood@freescale.com> Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
This commit is contained in:
Родитель
53567cf3c2
Коммит
d742aa152f
|
@ -117,6 +117,5 @@ void flush_hugetlb_page(struct vm_area_struct *vma, unsigned long vmaddr)
|
||||||
struct hstate *hstate = hstate_file(vma->vm_file);
|
struct hstate *hstate = hstate_file(vma->vm_file);
|
||||||
unsigned long tsize = huge_page_shift(hstate) - 10;
|
unsigned long tsize = huge_page_shift(hstate) - 10;
|
||||||
|
|
||||||
__flush_tlb_page(vma ? vma->vm_mm : NULL, vmaddr, tsize, 0);
|
__flush_tlb_page(vma->vm_mm, vmaddr, tsize, 0);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -305,7 +305,7 @@ void __flush_tlb_page(struct mm_struct *mm, unsigned long vmaddr,
|
||||||
void flush_tlb_page(struct vm_area_struct *vma, unsigned long vmaddr)
|
void flush_tlb_page(struct vm_area_struct *vma, unsigned long vmaddr)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_HUGETLB_PAGE
|
#ifdef CONFIG_HUGETLB_PAGE
|
||||||
if (is_vm_hugetlb_page(vma))
|
if (vma && is_vm_hugetlb_page(vma))
|
||||||
flush_hugetlb_page(vma, vmaddr);
|
flush_hugetlb_page(vma, vmaddr);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче