serious termios flaw?

Thomas Doerfler Thomas.Doerfler at imd-systems.de
Sun Jun 25 09:17:30 UTC 2006


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Till,

I am not sure which mode of termios drivers you are referring to.
Generally the termios driver API can pass multiple characters to a write
routine. in polled mode, the driver's polled write function must send
all given characters to the hardware. I can see this implemented e.g. in
the "pc386" BSP in console.c:

static int
ibmpc_console_write(int minor, const char *buf, int len)
{
  int count;
  for (count = 0; count < len; count++)
  {
    _IBMPC_outch( buf[ count ] );
    if( buf[ count ] == '\n')
      _IBMPC_outch( '\r' );            /* LF = LF + CR */
  }
  return 0;
}

In interrput mode, termios can pass a rather long buffer to the driver's
write function, but the driver is not forced to handle that size.
Instead, when the driver's interrupt function calls
"rtems_termios_dequeue_characters", it passes to termios how many
characters have been sent out to the device. Simple devices without FIFO
or DMA support may always pass a "1" to this function, then termios will
pass the rest of the send buffer once more to the device driver's write
function.

wkr,
Thomas.





Till Straumann schrieb:
> I found that termios (and, BTW: ppp_tty) call
> the low-level driver's 'write' routine, possibly supplying
> more than one character and without checking
> the return code of 'write'.
> 
> Most UART drivers OTOH (I checked i386, ppc, uC5282[coldfire]),
> silently discard anything after the first char in the buffer.
> This is not reflected in the return code.
> 
> IMO, the low-level drivers should return the # of chars
> actually written and the upper layers should check for and
> handle this case.
> 
> Am I missing something?
> 
> Till


- --
- --------------------------------------------
IMD Ingenieurbuero fuer Microcomputertechnik
Thomas Doerfler           Herbststrasse 8
D-82178 Puchheim          Germany
email:    Thomas.Doerfler at imd-systems.de
PGP public key available at:
     http://www.imd-systems.de/pgpkey_en.html
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.3 (MingW32)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iD8DBQFEnlSqwHyg4bDtfjQRAgA8AJ9/QLrB4jL5CwglhCZATZ9JTaeQJgCfRYsN
pI4KKdv+/L8xSH1H8XkSXqU=
=YRSP
-----END PGP SIGNATURE-----



More information about the users mailing list