From: Oleg Nesterov Hugetlbfs mmap with MAP_PRIVATE becomes MAP_SHARED silently, but vma->vm_flags have no VM_SHARED bit. Reading from /dev/zero into hugetlb area will do: read_zero() read_zero_pagealigned() if (vma->vm_flags & VM_SHARED) break; // fallback to clear_user() zap_page_range(); zeromap_page_range(); It will hit BUG_ON() in unmap_hugepage_range() if region is not huge page aligned, or silently convert it into the private anonymous mapping. Signed-off-by: Oleg Nesterov Signed-off-by: Andrew Morton --- 25-akpm/drivers/char/mem.c | 2 +- 1 files changed, 1 insertion(+), 1 deletion(-) diff -puN drivers/char/mem.c~dev-zero-vs-hugetlb-mappings drivers/char/mem.c --- 25/drivers/char/mem.c~dev-zero-vs-hugetlb-mappings 2004-07-10 17:59:38.005815256 -0700 +++ 25-akpm/drivers/char/mem.c 2004-07-10 17:59:38.008814800 -0700 @@ -415,7 +415,7 @@ static inline size_t read_zero_pagealign if (vma->vm_start > addr || (vma->vm_flags & VM_WRITE) == 0) goto out_up; - if (vma->vm_flags & VM_SHARED) + if (vma->vm_flags & (VM_SHARED | VM_HUGETLB)) break; count = vma->vm_end - addr; if (count > size) _