[FIX] Check for atomic context in swap_handle_mm_fault 53/46853/4
authorVyacheslav Cherkashin <v.cherkashin@samsung.com>
Wed, 26 Aug 2015 08:07:44 +0000 (11:07 +0300)
committerDmitry Kovalenko <d.kovalenko@samsung.com>
Fri, 28 Aug 2015 06:32:15 +0000 (23:32 -0700)
Now we return an error instead of generating page fault in
atomic context.

Change-Id: I1d4654142c4f22da500c2d3981509f631cb95fd5
Signed-off-by: Vyacheslav Cherkashin <v.cherkashin@samsung.com>
kprobe/swap_kprobes_deps.c

index 5c4bef4..7a8a008 100644 (file)
@@ -208,15 +208,25 @@ DECLARE_MOD_DEP_WRAPPER(swap_handle_mm_fault,
                        int,
                        struct mm_struct *mm, struct vm_area_struct *vma,
                        unsigned long address, int write_access)
-IMP_MOD_DEP_WRAPPER(handle_mm_fault, mm, vma, address, write_access)
-#endif
-#else
+{
+       if (in_atomic())
+               return VM_FAULT_ERROR | VM_FAULT_OOM;
+
+       IMP_MOD_DEP_WRAPPER(handle_mm_fault, mm, vma, address, write_access)
+}
+#endif /* LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 18) */
+#else /* LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 30) */
 DECLARE_MOD_DEP_WRAPPER(swap_handle_mm_fault,
                        int,
                        struct mm_struct *mm, struct vm_area_struct *vma,
                        unsigned long address, unsigned int flags)
-IMP_MOD_DEP_WRAPPER(handle_mm_fault, mm, vma, address, flags)
-#endif
+{
+       if (in_atomic())
+               return VM_FAULT_ERROR | VM_FAULT_OOM;
+
+       IMP_MOD_DEP_WRAPPER(handle_mm_fault, mm, vma, address, flags)
+}
+#endif /* LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 30) */
 
 #if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 38)
 DECLARE_MOD_DEP_WRAPPER(swap_get_gate_vma,