7.0-RELEASE tty/pty problems ?

b. nyec bnyec at yahoo.com
Mon Jul 2 22:13:00 UTC 2012


We've been experiencing problems with allocating tty/pty's on a few of our systems running FreeBSD 7.0-RELEASE. I could be way off, but it seems that the tty/pty's are not being made available after being used and/or are no longer valid or corrupted ?? I am aware that 8.x and up uses Unix98-style PTYS (/dev/ptmx). Unfortunately, upgrading is not an option at this time. 

Thanks for any Help. 
PS, Sorry if this is bad netiquette, but i've posted this on freebsd forums, (a tad bit more info http://forums.freebsd.org/showthread.php?t=33080) just figured I'd ask here as well. 

- B

# uname -mv
FreeBSD 7.0-RELEASE #0: Mon Apr 28 17:36:07 CDT 2008     root@:/usr/obj/usr/src/sys/COLONEL  amd64

rancid running from crontab, log errors
clogin error: Error: telnet failed: The system has no more ptys.  
Ask your system administrator to create more.

ssh logins sometimes produce: 

Warning: no access to tty (Bad file descriptor).
Thus no job control in this shell.

sshd logs, 
sshd[68948]: debug1: Allocating pty.
sshd[68948]: error: openpty: No such file or directory
sshd[68948]: error: session_pty_req: session 0 alloc failed

There appear to be plenty of tty/pty devices...

# ls -la /dev/pty* | wc -l
# ls -la /dev/tty* | wc -l

Test program demonstrating the problem, 

# test_openpty.c
/* gcc -Wall test_openpty.c -lutil */

int main() {
        int max = 10; /* number to try */ 
        int i = 1;
        int masterfd, slavefd, status;
        char ptyname[256];

     while(max--) {
        status = openpty(&masterfd, &slavefd, ptyname, NULL, NULL);
        if(status < 0) {
              fprintf(stderr, "openpty() failed: %s\n",strerror(errno));
        printf("%d: openpty: %s\n",i,ptyname);

 return 0;

# who | wc -l

# ./a.out
1: openpty: /dev/ttyOm
2: openpty: /dev/ttyOq
3: openpty: /dev/ttyOt
4: openpty: /dev/ttyOu
openpty() failed: No such file or directory

Truss output...

open("/dev/ttyOu",O_RDWR,00)                     = 10 (0xa)
4: openpty: /dev/ttyOu
write(1,"4: openpty: /dev/ttyOu\n",23)           = 23 (0x17)
revoke(0x7fffffffea70,0x800a19000,0x0,0x17,0xffffffffb0644d40,0x7fffffffe0b8) = 0 (0x0)
stat("/etc/nsswitch.conf",{mode=-rw-r--r-- ,inode=17145912,size=313,blksize=4096}) = 0 (0x0)
open("/etc/group",O_RDONLY,0666)                 = 11 (0xb)
fstat(11,{mode=-rw-r--r-- ,inode=17145897,size=565,blksize=4096}) = 0 (0x0)
lseek(11,0x0,SEEK_CUR)                           = 0 (0x0)
lseek(11,0x0,SEEK_SET)                           = 0 (0x0)
read(11,"# $FreeBSD: src/etc/group,v 1.35"...,4096) = 565 (0x235)
close(11)                                        = 0 (0x0)
open("/dev/ptyp0",O_RDWR,00)                     ERR#5 'Input/output error'
open("/dev/ptyp1",O_RDWR,00)                     ERR#5 'Input/output error'
open("/dev/ptyp2",O_RDWR,00)                     ERR#5 'Input/output error'
open("/dev/ptyp3",O_RDWR,00)                     ERR#5 'Input/output error'


open("/dev/ptyOu",O_RDWR,00)                     ERR#5 'Input/output error'
open("/dev/ptyOv",O_RDWR,00)                     ERR#5 'Input/output error'
openpty() failed: No such file or directory
write(2,"openpty() failed: No such file o"...,44) = 44 (0x2c)
process exit, rval = 1

FWIW, "/etc/rc.d/devfs restart" and "kill -HUP 1" does not fix the problem. 

# df /dev
Filesystem 1K-blocks Used Avail Capacity  Mounted on
devfs              1    1     0   100%    /dev

More information about the freebsd-questions mailing list