diff options
Diffstat (limited to 'usr/src')
-rw-r--r-- | usr/src/uts/common/brand/lx/syscall/lx_fcntl.c | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/usr/src/uts/common/brand/lx/syscall/lx_fcntl.c b/usr/src/uts/common/brand/lx/syscall/lx_fcntl.c index d3317d02e8..78ddf1308d 100644 --- a/usr/src/uts/common/brand/lx/syscall/lx_fcntl.c +++ b/usr/src/uts/common/brand/lx/syscall/lx_fcntl.c @@ -279,8 +279,19 @@ lx_fcntl_common(int fd, int cmd, ulong_t arg) error = VOP_IOCTL(fp->f_vnode, FIOSETOWN, (intptr_t)&pid, flag, CRED(), &rv, NULL); releasef(fd); - if (error != 0) - return (set_errno(error)); + if (error != 0) { + /* + * On illumos F_SETOWN is only defined for sockets, but + * some apps hardcode to do this fcntl on other devices + * (e.g. /dev/tty) to setup signal handling. If the + * app is only setting itself to be the signal + * handler, we pretend to succeed. + */ + if (error != EINVAL || + curthread->t_procp->p_pid != pid) { + return (set_errno(error)); + } + } rc = 0; break; |