All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 4 of 7] minios: fix minios console
@ 2009-10-12 17:20 Stefano Stabellini
  2009-10-12 22:54 ` Mick Jordan
  0 siblings, 1 reply; 5+ messages in thread
From: Stefano Stabellini @ 2009-10-12 17:20 UTC (permalink / raw)
  To: xen-devel

MiniOS' console_print tries to expand '\n' into "\n\r" in place, causing
page faults if the string resides in text.
Use a duplicate of the string instead.

Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>

---

diff -r 21935dfa8e5f extras/mini-os/console/console.c
--- a/extras/mini-os/console/console.c	Fri Oct 09 19:30:39 2009 +0100
+++ b/extras/mini-os/console/console.c	Mon Oct 12 16:03:49 2009 +0100
@@ -79,6 +79,8 @@
 void console_print(struct consfront_dev *dev, char *data, int length)
 {
     char *curr_char, saved_char;
+    char copied_str[length];
+    char *copied_ptr;
     int part_len;
     int (*ring_send_fn)(struct consfront_dev *dev, const char *data, unsigned length);
 
@@ -86,24 +88,26 @@
         ring_send_fn = xencons_ring_send_no_notify;
     else
         ring_send_fn = xencons_ring_send;
-        
-    for(curr_char = data; curr_char < data+length-1; curr_char++)
+
+    copied_ptr = copied_str;
+    memcpy(copied_ptr, data, length);
+    for(curr_char = copied_ptr; curr_char < copied_ptr+length-1; curr_char++)
     {
         if(*curr_char == '\n')
         {
             saved_char = *(curr_char+1);
             *(curr_char+1) = '\r';
-            part_len = curr_char - data + 2;
-            ring_send_fn(dev, data, part_len);
+            part_len = curr_char - copied_ptr + 2;
+            ring_send_fn(dev, copied_ptr, part_len);
             *(curr_char+1) = saved_char;
-            data = curr_char+1;
+            copied_ptr = curr_char+1;
             length -= part_len - 1;
         }
     }
     
-    ring_send_fn(dev, data, length);
+    ring_send_fn(dev, copied_ptr, length);
     
-    if(data[length-1] == '\n')
+    if(copied_ptr[length-1] == '\n')
         ring_send_fn(dev, "\r", 1);
 }

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2009-10-13 17:15 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-10-12 17:20 [PATCH 4 of 7] minios: fix minios console Stefano Stabellini
2009-10-12 22:54 ` Mick Jordan
2009-10-13 12:22   ` Stefano Stabellini
2009-10-13 16:34     ` Mick Jordan
2009-10-13 17:15       ` Ian Jackson

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.