Skip to content

Commit 79986ab

Browse files
vinayakmenonYixun Lan
authored andcommitted
PD#146810: binder: backport changes from kernel-3.18 for android O (8.0)
staging: binder: add vm_fault handler An issue was observed when a userspace task exits. The page which hits error here is the zero page. In binder mmap, the whole of vma is not mapped. On a task crash, when debuggerd reads the binder regions, the unmapped areas fall to do_anonymous_page in handle_pte_fault, due to the absence of a vm_fault handler. This results in zero page being mapped. Later in zap_pte_range, vm_normal_page returns zero page in the case of VM_MIXEDMAP and it results in the error. BUG: Bad page map in process mediaserver pte:9dff379f pmd:9bfbd831 page:c0ed8e60 count:1 mapcount:-1 mapping: (null) index:0x0 page flags: 0x404(referenced|reserved) addr:40c3f000 vm_flags:10220051 anon_vma: (null) mapping:d9fe0764 index:fd vma->vm_ops->fault: (null) vma->vm_file->f_op->mmap: binder_mmap+0x0/0x274 CPU: 0 PID: 1463 Comm: mediaserver Tainted: G W 3.10.17+ khadas#1 [<c001549c>] (unwind_backtrace+0x0/0x11c) from [<c001200c>] (show_stack+0x10/0x14) [<c001200c>] (show_stack+0x10/0x14) from [<c0103d78>] (print_bad_pte+0x158/0x190) [<c0103d78>] (print_bad_pte+0x158/0x190) from [<c01055f0>] (unmap_single_vma+0x2e4/0x598) [<c01055f0>] (unmap_single_vma+0x2e4/0x598) from [<c010618c>] (unmap_vmas+0x34/0x50) [<c010618c>] (unmap_vmas+0x34/0x50) from [<c010a9e4>] (exit_mmap+0xc8/0x1e8) [<c010a9e4>] (exit_mmap+0xc8/0x1e8) from [<c00520f0>] (mmput+0x54/0xd0) [<c00520f0>] (mmput+0x54/0xd0) from [<c005972c>] (do_exit+0x360/0x990) [<c005972c>] (do_exit+0x360/0x990) from [<c0059ef0>] (do_group_exit+0x84/0xc0) [<c0059ef0>] (do_group_exit+0x84/0xc0) from [<c0066de0>] (get_signal_to_deliver+0x4d4/0x548) [<c0066de0>] (get_signal_to_deliver+0x4d4/0x548) from [<c0011500>] (do_signal+0xa8/0x3b8) Add a vm_fault handler which returns VM_FAULT_SIGBUS, and prevents the wrong fallback to do_anonymous_page. Change-Id: Icec2b2cb10ed5e18363b77efadca974fedc70416 Signed-off-by: Vinayak Menon <[email protected]> Signed-off-by: Greg Kroah-Hartman <[email protected]> Signed-off-by: Yixun Lan <[email protected]>
1 parent b8fb574 commit 79986ab

File tree

1 file changed

+6
-0
lines changed

1 file changed

+6
-0
lines changed

drivers/staging/android/binder.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2796,9 +2796,15 @@ static void binder_vma_close(struct vm_area_struct *vma)
27962796
binder_defer_work(proc, BINDER_DEFERRED_PUT_FILES);
27972797
}
27982798

2799+
static int binder_vm_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
2800+
{
2801+
return VM_FAULT_SIGBUS;
2802+
}
2803+
27992804
static struct vm_operations_struct binder_vm_ops = {
28002805
.open = binder_vma_open,
28012806
.close = binder_vma_close,
2807+
.fault = binder_vm_fault,
28022808
};
28032809

28042810
static int binder_mmap(struct file *filp, struct vm_area_struct *vma)

0 commit comments

Comments
 (0)