]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
uprobes: __copy_insn() should ensure a_ops->readpage != NULL
authorOleg Nesterov <oleg@redhat.com>
Fri, 15 Jun 2012 15:43:25 +0000 (17:43 +0200)
committerIngo Molnar <mingo@kernel.org>
Sat, 16 Jun 2012 07:10:42 +0000 (09:10 +0200)
__copy_insn() blindly calls read_mapping_page(), this will crash
the kernel if ->readpage == NULL, add the necessary check. For
example, hugetlbfs_aops->readpage is NULL. Perhaps we should
change read_mapping_page() instead.

Signed-off-by: Oleg Nesterov <oleg@redhat.com>
Acked-by: Srikar Dronamraju <srikar@linux.vnet.ibm.com>
Cc: Ananth N Mavinakayanahalli <ananth@in.ibm.com>
Cc: Anton Arapov <anton@redhat.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Link: http://lkml.kernel.org/r/20120615154325.GA9568@redhat.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
kernel/events/uprobes.c

index f0d04530af632f0fad0575d35204d9096600110a..604930bf9c92a39942f931982436ae45d2ba6b1d 100644 (file)
@@ -610,6 +610,9 @@ __copy_insn(struct address_space *mapping, struct vm_area_struct *vma, char *ins
        if (!filp)
                return -EINVAL;
 
+       if (!mapping->a_ops->readpage)
+               return -EIO;
+
        idx = (unsigned long)(offset >> PAGE_CACHE_SHIFT);
        off1 = offset &= ~PAGE_MASK;