|
@@ -1971,21 +1971,10 @@ int filemap_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
|
|
|
}
|
|
|
EXPORT_SYMBOL(filemap_fault);
|
|
|
|
|
|
-/*
|
|
|
- * Access another process' address space.
|
|
|
- * - source/target buffer must be kernel space
|
|
|
- */
|
|
|
-int access_process_vm(struct task_struct *tsk, unsigned long addr, void *buf, int len, int write)
|
|
|
+static int __access_remote_vm(struct task_struct *tsk, struct mm_struct *mm,
|
|
|
+ unsigned long addr, void *buf, int len, int write)
|
|
|
{
|
|
|
struct vm_area_struct *vma;
|
|
|
- struct mm_struct *mm;
|
|
|
-
|
|
|
- if (addr + len < addr)
|
|
|
- return 0;
|
|
|
-
|
|
|
- mm = get_task_mm(tsk);
|
|
|
- if (!mm)
|
|
|
- return 0;
|
|
|
|
|
|
down_read(&mm->mmap_sem);
|
|
|
|
|
@@ -2010,6 +1999,43 @@ int access_process_vm(struct task_struct *tsk, unsigned long addr, void *buf, in
|
|
|
}
|
|
|
|
|
|
up_read(&mm->mmap_sem);
|
|
|
+
|
|
|
+ return len;
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * @access_remote_vm - access another process' address space
|
|
|
+ * @mm: the mm_struct of the target address space
|
|
|
+ * @addr: start address to access
|
|
|
+ * @buf: source or destination buffer
|
|
|
+ * @len: number of bytes to transfer
|
|
|
+ * @write: whether the access is a write
|
|
|
+ *
|
|
|
+ * The caller must hold a reference on @mm.
|
|
|
+ */
|
|
|
+int access_remote_vm(struct mm_struct *mm, unsigned long addr,
|
|
|
+ void *buf, int len, int write)
|
|
|
+{
|
|
|
+ return __access_remote_vm(NULL, mm, addr, buf, len, write);
|
|
|
+}
|
|
|
+
|
|
|
+/*
|
|
|
+ * Access another process' address space.
|
|
|
+ * - source/target buffer must be kernel space
|
|
|
+ */
|
|
|
+int access_process_vm(struct task_struct *tsk, unsigned long addr, void *buf, int len, int write)
|
|
|
+{
|
|
|
+ struct mm_struct *mm;
|
|
|
+
|
|
|
+ if (addr + len < addr)
|
|
|
+ return 0;
|
|
|
+
|
|
|
+ mm = get_task_mm(tsk);
|
|
|
+ if (!mm)
|
|
|
+ return 0;
|
|
|
+
|
|
|
+ len = __access_remote_vm(tsk, mm, addr, buf, len, write);
|
|
|
+
|
|
|
mmput(mm);
|
|
|
return len;
|
|
|
}
|