If flag MEM_TYPE_CURRENT_KERNEL is set, the object is copied in the
buffer on the 2nd kernel, then read_vmcore() reads the buffer. If the
flag is not set, read_vmcore() reads old memory as usual.

Signed-off-by: HATAYAMA Daisuke <d.hatay...@jp.fujitsu.com>
---

 fs/proc/vmcore.c |   15 +++++++++++----
 1 files changed, 11 insertions(+), 4 deletions(-)

diff --git a/fs/proc/vmcore.c b/fs/proc/vmcore.c
index 09b7f34..c8899dc 100644
--- a/fs/proc/vmcore.c
+++ b/fs/proc/vmcore.c
@@ -158,10 +158,17 @@ static ssize_t read_vmcore(struct file *file, char __user 
*buffer,
                        tsz = m->offset + m->size - *fpos;
                        if (buflen < tsz)
                                tsz = buflen;
-                       start = m->paddr + *fpos - m->offset;
-                       tmp = read_from_oldmem(buffer, tsz, &start, 1);
-                       if (tmp < 0)
-                               return tmp;
+                       if (m->flag & MEM_TYPE_CURRENT_KERNEL) {
+                               if (copy_to_user(buffer,
+                                                m->buf + *fpos - m->offset,
+                                                tsz))
+                                       return -EFAULT;
+                       } else {
+                               start = m->paddr + *fpos - m->offset;
+                               tmp = read_from_oldmem(buffer, tsz, &start, 1);
+                               if (tmp < 0)
+                                       return tmp;
+                       }
                        buflen -= tsz;
                        *fpos += tsz;
                        buffer += tsz;

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to