--- 25-akpm/ipc/shm.c | 14 ++++++++++---- 1 files changed, 10 insertions(+), 4 deletions(-) diff -puN ipc/shm.c~shm-do_munmap-check ipc/shm.c --- 25/ipc/shm.c~shm-do_munmap-check 2004-03-14 11:42:55.987710200 -0800 +++ 25-akpm/ipc/shm.c 2004-03-14 11:44:00.087965480 -0800 @@ -791,10 +791,12 @@ asmlinkage long sys_shmdt(char __user *s */ if ((vma->vm_ops == &shm_vm_ops || is_vm_hugetlb_page(vma)) && (vma->vm_start - addr)/PAGE_SIZE == vma->vm_pgoff) { - + int ret; size = vma->vm_file->f_dentry->d_inode->i_size; - do_munmap(mm, vma->vm_start, vma->vm_end - vma->vm_start); + ret = do_munmap(mm, vma->vm_start, + vma->vm_end - vma->vm_start); + WARN_ON(ret); /* * We discovered the size of the shm segment, so * break out of here and fall through to the next @@ -818,9 +820,13 @@ asmlinkage long sys_shmdt(char __user *s /* finding a matching vma now does not alter retval */ if ((vma->vm_ops == &shm_vm_ops || is_vm_hugetlb_page(vma)) && - (vma->vm_start - addr)/PAGE_SIZE == vma->vm_pgoff) + (vma->vm_start - addr)/PAGE_SIZE == vma->vm_pgoff) { + int ret; - do_munmap(mm, vma->vm_start, vma->vm_end - vma->vm_start); + ret = do_munmap(mm, vma->vm_start, + vma->vm_end - vma->vm_start); + WARN_ON(ret); + } vma = next; } _