All of lore.kernel.org
 help / color / mirror / Atom feed
* [uml-devel] Patch for buffer overrun in serial/console device logic
@ 2003-10-07 18:55 Doug Dumitru
  2003-10-07 21:51 ` [uml-devel] " Jeff Dike
                   ` (2 more replies)
  0 siblings, 3 replies; 8+ messages in thread
From: Doug Dumitru @ 2003-10-07 18:55 UTC (permalink / raw)
  To: jdike, user-mode-linux-devel

I have been having trouble with buffer overruns when talking to pty 
devices.  My boot config directs serial device with syntax like:

   ... ssl0=tty:/dev/pty/pty1009 ...

This sets up a serial line to talk with a pty device.  We don't use the 
ptmx interface so that we can definitavely know which device to talk to 
from the outside.

The problem we are seeing is that outbound data gets overrun.  If you 
send 100K out the stream, you tend to see the first 28K or so followed 
by a big gap followed by the last 3K or so of the stream.  We have 
tested this with the ptmx syntax/logic and the problem still seems to be 
there.  Also, if you test this with a very fast consumer (such as a 
local cat from the device), the problem does not manifest itself.  UML 
must be able to produce data faster than the outside world can consume it.

After a lot of looking, it appears that the line_write routine in line.c 
does not check to see if the buffer has enough room.  The 
buffer_data(...) routine does not appear to check for available space at 
all and just overwrites old data.

Here is the patch that appears to correct the issue:




--- ../linux-2.4.22/arch/um/drivers/line.c      Tue Oct  7 10:25:20 2003
+++ arch/um/drivers/line.c      Tue Oct  7 10:27:06 2003
@@ -97,6 +97,7 @@
         char *new;
         unsigned long flags;
         int n, err, i;
+       int room;

         if(tty->stopped) return 0;

@@ -115,6 +116,10 @@
         i = minor(tty->device) - tty->driver.minor_start;
         line = &lines[i];

+       room = line_write_room(tty);
+       if ( !room ) return -EAGAIN;
+       if ( room < len ) len = room;
+
         down(&line->sem);
         if(line->head != line->tail){
                 local_irq_save(flags);




We have this running in our 2.4.22 build, but would like to see it (or 
something equivelent) in the release so that we can take patches cleanly.

We also have a much messier, in-house patch that we apply to hostfs.c so 
that root mounts will correctly honor ownerships and rights.  Is anyone 
else working on this.  The 2.4.20-5um release appears to have a lot of 
missing stuff in this area, but if someone else is re-working this, I 
will put my patch down for a while and wait.  Otherwise, I will clean it 
up and submit it.

--------------------------------------------------------------------
Doug Dumitru     800-470-2756     (610-237-2000)
EasyCo LLC       doug@easyco.com  http://easyco.com
--------------------------------------------------------------------
D3, U2, jBase Virtual Servers.    Off-site backup over the internet.
Develop/test/deploy from $20/mo.  Fast, secure, cheaper than tape.
http://mirroredservers.com        http://mirroredbackup.com



-------------------------------------------------------
This sf.net email is sponsored by:ThinkGeek
Welcome to geek heaven.
http://thinkgeek.com/sf
_______________________________________________
User-mode-linux-devel mailing list
User-mode-linux-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel

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

end of thread, other threads:[~2003-11-09  1:45 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2003-10-07 18:55 [uml-devel] Patch for buffer overrun in serial/console device logic Doug Dumitru
2003-10-07 21:51 ` [uml-devel] " Jeff Dike
2003-10-07 22:31   ` Doug Dumitru
2003-10-11  1:49     ` Jeff Dike
2003-10-12  3:39       ` Doug Dumitru
2003-10-13 20:43       ` BlaisorBlade
     [not found] ` <p05111b00bba97b88a68d@[10.96.96.13]>
2003-10-08 16:25   ` [uml-devel] " Doug Dumitru
2003-11-09  1:53 ` [uml-devel] " Jeff Dike

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.