diff options
author | Hugh Dickins <hugh@veritas.com> | 2005-10-11 19:16:26 +0100 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2005-10-11 12:03:47 -0700 |
commit | f5154a98a1931641f0448f6512294a15279110d7 (patch) | |
tree | fd5ea19514d07338f58b2df4b2f87922b9975a04 /mm/fremap.c | |
parent | 9149ccfa3571eaa4a4b444777d67fc4ed3ebcf27 (diff) | |
download | kernel-crypto-f5154a98a1931641f0448f6512294a15279110d7.tar.gz kernel-crypto-f5154a98a1931641f0448f6512294a15279110d7.tar.xz kernel-crypto-f5154a98a1931641f0448f6512294a15279110d7.zip |
[PATCH] Don't map the same page too much
Refuse to install a page into a mapping if the mapping count is already
ridiculously large.
You probably cannot trigger this on 32-bit architectures, but on a
64-bit setup we should protect against it.
Signed-off-by: Hugh Dickins <hugh@veritas.com>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'mm/fremap.c')
-rw-r--r-- | mm/fremap.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/mm/fremap.c b/mm/fremap.c index 3235fb77c13..ab23a0673c3 100644 --- a/mm/fremap.c +++ b/mm/fremap.c @@ -89,6 +89,9 @@ int install_page(struct mm_struct *mm, struct vm_area_struct *vma, size = (i_size_read(inode) + PAGE_CACHE_SIZE - 1) >> PAGE_CACHE_SHIFT; if (!page->mapping || page->index >= size) goto err_unlock; + err = -ENOMEM; + if (page_mapcount(page) > INT_MAX/2) + goto err_unlock; zap_pte(mm, vma, addr, pte); |