summaryrefslogtreecommitdiffstats
path: root/sys/kern/tty_pts.c
Commit message (Collapse)AuthorAgeFilesLines
* Improve my previous changes to the TTY code: also remove memcpy().ed2009-03-011-1/+1
| | | | | | | | It's better to just use internal language constructs, because it is likely the compiler has a better opinion on whether to perform inlining, which is very likely to happen to struct winsize. Submitted by: Christoph Mallon <christoph mallon gmx de>
* Replace bcopy() calls inside the TTY layer with memcpy()/strlcpy().ed2009-02-281-1/+1
| | | | | In all these cases the buffers never overlap. Program names are also likely to be shorter, so use a regular strlcpy() to copy p_comm.
* Squash some small bugs in pts(4).ed2009-02-191-6/+3
| | | | | | | | | | | - Don't return a negative errno when using an unknown ioctl() on a pseudo-terminal master device. Be sure to convert ENOIOCTL to ENOTTY, just like the TTY layer does. - Even though we should return st_rdev of the master device node when emulating pty(4) devices, FIODGNAME should still return the name of the slave device. Otherwise ptsname(3) and ttyname(3) return an invalid device name.
* Set PTS_FINISHED before waking up any threads.ed2008-12-211-2/+1
| | | | | | | | Inside ptsdrv_{in,out}wakeup() we call KNOTE_LOCKED() to wake up any kevent(2) users. Because the kqueue handlers are executed synchronously, we must set PTS_FINISHED before calling ptsdrv_{in,out}wakeup(). Discovered by: nork
* Add FIONREAD to pseudo-terminal master devices.ed2008-12-131-0/+10
| | | | | | | | | All ioctl()'s that aren't implemented by pts(4) are forwarded to the TTY itself. Unfortunately this is not correct for FIONREAD, because it will give the wrong amount of bytes that are available to read. Tested by: keramida Reminded by: keramida
* Add kqueue()-support to pseudo-terminal master devices.ed2008-12-111-0/+107
| | | | | | | | | | | | | One thing I didn't expect many applications to use, was kqueue() on pseudo-terminal master devices. There are applications that use kqueue() on the TTY itself (rtorrent, etc). That doesn't mean we shouldn't implement this. Libraries like libevent use kqueue() by default, which means they wouldn't be able to use kqueue(). The old TTY layer implements a very broken version of kqueue() by performing the actual polling on the TTY device. Discussed with: peter
* Remove redundant return value tests.ed2008-11-041-6/+1
| | | | | There is no need to test whether the return value is non-zero here. Just return the error number directly.
* Track state to determine if the associated TTY device node has been used.ed2008-09-231-4/+19
| | | | | | | | | | | | | It turns out our old TTY layer (and other implementations) block when you read() on a PTY master device of which the slave device node has not been opened yet. Our new implementation just returned 0. This caused applications like telnetd to die in a very subtle way (when child processes would open the TTY later than the first call to select()). Introduce a new flag called PTS_FINISHED, which indicates whether we should block or bail out of a read() or write() occurs. Reported by: Claude Buisson <clbuisson orange fr>
* Make fstat() on a pseudo-terminal master return sane timestamps.ed2008-09-211-5/+9
| | | | | | | | | Because pseudo-terminal master file descriptors no longer have a vnode underneath, we have to fill in fstat() values ourselves. Make our implementation somewhat sane by returning the timestamps of the TTY device node that corresponds with our file descriptor. Obtained from: //depot/projects/mpsafettty/...
* Implement pts(4) packet mode.ed2008-09-041-28/+85
| | | | | | | | | As reported by several users on the mailing lists, applications like screen(1) fail to properly handle ^S and ^Q characters. This was because MPSAFE TTY didn't implement packet mode (TIOCPKT) yet. Add basic packet mode support to make these applications work again. Obtained from: //depot/projects/mpsafetty/...
* Fix pts(4) error codes when slave device is closed.ed2008-08-221-4/+2
| | | | | | | | | | | | | | | | | | | | | | Unlike pre-MPSAFE TTY, the pts(4) driver always returned ENXIO when a read() or write() was performed on a pseudo-terminal master device when the slave device was not opened. The old implementation had different semantics: - When the slave device had not been opened yet, read() and write() just blocked. - When the slave device had been closed, a read() call would return 0 bytes length. - When the slave device had been closed, a write() call would return EIO. Change the new implementation to return 0 and EIO as well. We don't implement the first rule, but I suspect this is not needed, because routines like openpty() also open the slave device node. posix_openpt() users also do similar things. Reported by: rink Tested by: rink
* Integrate the new MPSAFE TTY layer to the FreeBSD operating system.ed2008-08-201-785/+518
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The last half year I've been working on a replacement TTY layer for the FreeBSD kernel. The new TTY layer was designed to improve the following: - Improved driver model: The old TTY layer has a driver model that is not abstract enough to make it friendly to use. A good example is the output path, where the device drivers directly access the output buffers. This means that an in-kernel PPP implementation must always convert network buffers into TTY buffers. If a PPP implementation would be built on top of the new TTY layer (still needs a hooks layer, though), it would allow the PPP implementation to directly hand the data to the TTY driver. - Improved hotplugging: With the old TTY layer, it isn't entirely safe to destroy TTY's from the system. This implementation has a two-step destructing design, where the driver first abandons the TTY. After all threads have left the TTY, the TTY layer calls a routine in the driver, which can be used to free resources (unit numbers, etc). The pts(4) driver also implements this feature, which means posix_openpt() will now return PTY's that are created on the fly. - Improved performance: One of the major improvements is the per-TTY mutex, which is expected to improve scalability when compared to the old Giant locking. Another change is the unbuffered copying to userspace, which is both used on TTY device nodes and PTY masters. Upgrading should be quite straightforward. Unlike previous versions, existing kernel configuration files do not need to be changed, except when they reference device drivers that are listed in UPDATING. Obtained from: //depot/projects/mpsafetty/... Approved by: philip (ex-mentor) Discussed: on the lists, at BSDCan, at the DevSummit Sponsored by: Snow B.V., the Netherlands dcons(4) fixed by: kan
* - Close a race with concurrent open's of a pts master device which couldjhb2008-08-041-7/+13
| | | | | | | | result in leaked tty structures. - When constructing a new pty, allocate it's tty structure before adding it to the list. MFC after: 1 week
* In keeping with style(9)'s recommendations on macros, use a ';'rwatson2008-03-161-1/+1
| | | | | | | | | after each SYSINIT() macro invocation. This makes a number of lightweight C parsers much happier with the FreeBSD kernel source, including cflow's prcc and lxr. MFC after: 1 month Discussed with: imp, rink
* Fix bad function type passed to destroy_dev_sched_cb().peter2007-07-051-1/+2
| | | | Approved by: re (rwatson)
* Use make_dev_credf(MAKEDEV_REF) instead of make_dev() from the clone handler.kib2007-07-031-10/+16
| | | | | | | | | | Lock Giant in the clone handler. Use destroy_dev_sched() explicitely from pty_maybecleanup() and postpone pty_release() until both master and slave cdevs are destroyed by setting it as callback for destroy_dev_sched(). Debugging help and testing by: Peter Holm Approved by: re (kensmith)
* Canonicalize copyrights in some files I hold copyrights on:rwatson2007-01-081-1/+1
| | | | | | | | - Sort by date in license blocks, oldest copyright first. - All rights reserved after all copyrights, not just the first. - Use (c) to be consistent with other entries. MFC after: 3 days
* Sweep kernel replacing suser(9) calls with priv(9) calls, assigningrwatson2006-11-061-2/+5
| | | | | | | | | | | | | specific privilege names to a broad range of privileges. These may require some future tweaking. Sponsored by: nCircle Network Security, Inc. Obtained from: TrustedBSD Project Discussed on: arch@ Reviewed (at least in part) by: mlaier, jmg, pjd, bde, ceri, Alex Lyashkov <umka at sevcity dot net>, Skip Ford <skip dot ford at verizon dot net>, Antoine Brodin <antoine dot brodin at laposte dot net>
* Increment nb_allocated while holding the pt_mtx lock to avoid races.jhb2006-11-011-1/+1
|
* Comment and style tweak.jhb2006-11-011-2/+2
|
* Free tty struct after last close. This should fix the pty-leak by numbers.mbr2006-09-291-1/+15
| | | | | Remove workarounds for tty_refcount beeing 0, this will be fixed differently later.
* Fix our ioctl(2) implementation when the argument is "int". Newru2006-09-271-0/+11
| | | | | | | | | | | | | ioctls passing integer arguments should use the _IOWINT() macro. This fixes a lot of ioctl's not working on sparc64, most notable being keyboard/syscons ioctls. Full ABI compatibility is provided, with the bonus of fixing the handling of old ioctls on sparc64. Reviewed by: bde (with contributions) Tested by: emax, marius MFC after: 1 week
* Also check use_pty in the ptmx clone lookup; this means that when ptmxrwatson2006-04-281-0/+3
| | | | | | | support is turned off using the sysctl, we no longer even allow the ptmx device to be looked up. Foot provided by: peter
* Allow root to open prison pts devices too.csjp2006-01-311-1/+1
| | | | Pointed out by: rwatson
* Move pts master devices into /dev/pty/ instead of littering /dev with them;rwatson2006-01-301-2/+2
| | | | | | | | | this is more consistent with the placement of slaves in /dev/pts. The actual name doesn't matter as it's not part of the exposed API or used by libc. In some sense, it would be nice if these device nodes didn't have to have names in devfs at all. Suggested by: Stephen McKay <smckay at internode dot on dot net>
* Rename use_old_pty variable to use_pts, as this more accurately reflectsrwatson2006-01-281-5/+4
| | | | | | the sense of the variable. Suggested by: dwhite
* Merge a bunch of changes that where done in tty_pty.c after tty_pts.c wascognet2006-01-271-104/+7
| | | | forked from it, but missed from some reason.
* Take into account that bits 0x0000ff00 can't be used for minor.cognet2006-01-271-4/+7
|
* Don't attempt to re-create the /dev entry for the slave part if it alreadycognet2006-01-261-2/+6
| | | | | | | exist when opening the master. This can happen if one open the master, then open the slave, then close and re-open the master. Reported by: Peter Holm
* Bring in a sysv-style pts implementation, as found in the rwatson_pts ↵cognet2006-01-261-0/+970
perforce branch. It works the same as its SysV/linux counterpart : You obtain a fd to the master pseudo terminal by opening /dev/ptmx, which craetes a node for the master as /dev/pty[num] and a node for the slave as /dev/pts/[num]. It should play nicely with the existing BSD ptys. By default, the system will use the BSD ptys, one can set the sysctl kern.pts.enable to 1 to make it use the new pts system. The max number of pty that can be allocated on a system can be changed with the sysctl kern.pts.max. It defaults to 1000, and can be increased, but it is not recommanded, as any pty with a number > 999 won't be handled by whatever uses utmp(5).
OpenPOWER on IntegriCloud