2003-02-24 21:44:42

by Paul Larson

[permalink] [raw]
Subject: [PATCH] pte_alloc_kernel needs additional check

This applies against 2.5.63.
pte_alloc_kernel needs a check for pmd_present(*pmd) at the end.

Thanks,
Paul Larson

--- linux-2.5.63/mm/memory.c Mon Feb 24 13:05:31 2003
+++ linux-2.5.63-fix/mm/memory.c Mon Feb 24 15:45:05 2003
@@ -186,7 +186,9 @@
pmd_populate_kernel(mm, pmd, new);
}
out:
- return pte_offset_kernel(pmd, address);
+ if (pmd_present(*pmd))
+ return pte_offset_kernel(pmd, address);
+ return NULL;
}
#define PTE_TABLE_MASK ((PTRS_PER_PTE-1) * sizeof(pte_t))
#define PMD_TABLE_MASK ((PTRS_PER_PMD-1) * sizeof(pmd_t))



2003-02-24 22:26:32

by Andrew Morton

[permalink] [raw]
Subject: Re: [PATCH] pte_alloc_kernel needs additional check

Paul Larson <[email protected]> wrote:
>
> This applies against 2.5.63.
> pte_alloc_kernel needs a check for pmd_present(*pmd) at the end.
>
> Thanks,
> Paul Larson
>
> --- linux-2.5.63/mm/memory.c Mon Feb 24 13:05:31 2003
> +++ linux-2.5.63-fix/mm/memory.c Mon Feb 24 15:45:05 2003
> @@ -186,7 +186,9 @@
> pmd_populate_kernel(mm, pmd, new);
> }
> out:
> - return pte_offset_kernel(pmd, address);
> + if (pmd_present(*pmd))
> + return pte_offset_kernel(pmd, address);
> + return NULL;
> }
> #define PTE_TABLE_MASK ((PTRS_PER_PTE-1) * sizeof(pte_t))
> #define PMD_TABLE_MASK ((PTRS_PER_PMD-1) * sizeof(pmd_t))

Confused. I cannot see a codepath which makes this test necessary?


2003-02-24 23:36:25

by William Lee Irwin III

[permalink] [raw]
Subject: Re: [PATCH] pte_alloc_kernel needs additional check

Paul Larson <[email protected]> wrote:
- return pte_offset_kernel(pmd, address);
+ if (pmd_present(*pmd))
+ return pte_offset_kernel(pmd, address);
+ return NULL;

On Mon, Feb 24, 2003 at 02:33:41PM -0800, Andrew Morton wrote:
> Confused. I cannot see a codepath which makes this test necessary?

Looks like it's OOM handling by analogy with pte_alloc_map().

-- wli