summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sys/dev/drm/drm_drv.h2
-rw-r--r--sys/kern/kern_descrip.c11
-rw-r--r--sys/kern/subr_log.c4
-rw-r--r--sys/kern/sys_pipe.c4
-rw-r--r--sys/kern/sys_socket.c4
-rw-r--r--sys/kern/tty.c2
-rw-r--r--sys/kern/uipc_syscalls.c6
-rw-r--r--sys/net/bpf.c4
-rw-r--r--sys/net/if_tap.c4
-rw-r--r--sys/net/if_tun.c4
-rw-r--r--sys/sys/filedesc.h2
11 files changed, 27 insertions, 20 deletions
diff --git a/sys/dev/drm/drm_drv.h b/sys/dev/drm/drm_drv.h
index ff034dd..729b2f9 100644
--- a/sys/dev/drm/drm_drv.h
+++ b/sys/dev/drm/drm_drv.h
@@ -1203,7 +1203,7 @@ int DRM(ioctl)( DRM_OS_IOCTL )
case FIOGETOWN:
atomic_dec(&dev->ioctl_count);
- *(int *) data = fgetown(dev->buf_sigio);
+ *(int *) data = fgetown(&dev->buf_sigio);
return 0;
}
#endif /* __FreeBSD__ */
diff --git a/sys/kern/kern_descrip.c b/sys/kern/kern_descrip.c
index 6b22f55..b464caf 100644
--- a/sys/kern/kern_descrip.c
+++ b/sys/kern/kern_descrip.c
@@ -775,10 +775,15 @@ fail:
* This is common code for FIOGETOWN ioctl called by fcntl(fd, F_GETOWN, arg).
*/
pid_t
-fgetown(sigio)
- struct sigio *sigio;
+fgetown(sigiop)
+ struct sigio **sigiop;
{
- return (sigio != NULL ? sigio->sio_pgid : 0);
+ pid_t pgid;
+
+ SIGIO_LOCK();
+ pgid = (*sigiop != NULL) ? (*sigiop)->sio_pgid : 0;
+ SIGIO_UNLOCK();
+ return (pgid);
}
/*
diff --git a/sys/kern/subr_log.c b/sys/kern/subr_log.c
index 0198557..4caa153 100644
--- a/sys/kern/subr_log.c
+++ b/sys/kern/subr_log.c
@@ -239,7 +239,7 @@ logioctl(dev_t dev, u_long com, caddr_t data, int flag, struct thread *td)
return (fsetown(*(int *)data, &logsoftc.sc_sigio));
case FIOGETOWN:
- *(int *)data = fgetown(logsoftc.sc_sigio);
+ *(int *)data = fgetown(&logsoftc.sc_sigio);
break;
/* This is deprecated, FIOSETOWN should be used instead. */
@@ -248,7 +248,7 @@ logioctl(dev_t dev, u_long com, caddr_t data, int flag, struct thread *td)
/* This is deprecated, FIOGETOWN should be used instead */
case TIOCGPGRP:
- *(int *)data = -fgetown(logsoftc.sc_sigio);
+ *(int *)data = -fgetown(&logsoftc.sc_sigio);
break;
default:
diff --git a/sys/kern/sys_pipe.c b/sys/kern/sys_pipe.c
index 0931262..7acaf9d 100644
--- a/sys/kern/sys_pipe.c
+++ b/sys/kern/sys_pipe.c
@@ -1204,7 +1204,7 @@ pipe_ioctl(fp, cmd, data, active_cred, td)
case FIOGETOWN:
PIPE_UNLOCK(mpipe);
- *(int *)data = fgetown(mpipe->pipe_sigio);
+ *(int *)data = fgetown(&mpipe->pipe_sigio);
return (0);
/* This is deprecated, FIOSETOWN should be used instead. */
@@ -1215,7 +1215,7 @@ pipe_ioctl(fp, cmd, data, active_cred, td)
/* This is deprecated, FIOGETOWN should be used instead. */
case TIOCGPGRP:
PIPE_UNLOCK(mpipe);
- *(int *)data = -fgetown(mpipe->pipe_sigio);
+ *(int *)data = -fgetown(&mpipe->pipe_sigio);
return (0);
}
diff --git a/sys/kern/sys_socket.c b/sys/kern/sys_socket.c
index b4a9442..46e8384 100644
--- a/sys/kern/sys_socket.c
+++ b/sys/kern/sys_socket.c
@@ -131,14 +131,14 @@ soo_ioctl(fp, cmd, data, active_cred, td)
return (fsetown(*(int *)data, &so->so_sigio));
case FIOGETOWN:
- *(int *)data = fgetown(so->so_sigio);
+ *(int *)data = fgetown(&so->so_sigio);
return (0);
case SIOCSPGRP:
return (fsetown(-(*(int *)data), &so->so_sigio));
case SIOCGPGRP:
- *(int *)data = -fgetown(so->so_sigio);
+ *(int *)data = -fgetown(&so->so_sigio);
return (0);
case SIOCATMARK:
diff --git a/sys/kern/tty.c b/sys/kern/tty.c
index 717b123..e749020 100644
--- a/sys/kern/tty.c
+++ b/sys/kern/tty.c
@@ -827,7 +827,7 @@ ttioctl(struct tty *tp, u_long cmd, void *data, int flag)
case FIOGETOWN:
if (tp->t_session != NULL && !isctty(p, tp))
return (ENOTTY);
- *(int *)data = fgetown(tp->t_sigio);
+ *(int *)data = fgetown(&tp->t_sigio);
break;
case TIOCEXCL: /* set exclusive use of tty */
diff --git a/sys/kern/uipc_syscalls.c b/sys/kern/uipc_syscalls.c
index 93e8615..24ee646 100644
--- a/sys/kern/uipc_syscalls.c
+++ b/sys/kern/uipc_syscalls.c
@@ -247,6 +247,7 @@ accept1(td, uap, compat)
struct socket *head, *so;
int fd;
u_int fflag;
+ pid_t pgid;
mtx_lock(&Giant);
fdp = td->td_proc->p_fd;
@@ -324,8 +325,9 @@ accept1(td, uap, compat)
so->so_state &= ~SS_COMP;
so->so_head = NULL;
- if (head->so_sigio != NULL)
- fsetown(fgetown(head->so_sigio), &so->so_sigio);
+ pgid = fgetown(&head->so_sigio);
+ if (pgid != 0)
+ fsetown(pgid, &so->so_sigio);
FILE_LOCK(nfp);
soref(so); /* file descriptor reference */
diff --git a/sys/net/bpf.c b/sys/net/bpf.c
index ee11748..faf89be 100644
--- a/sys/net/bpf.c
+++ b/sys/net/bpf.c
@@ -866,7 +866,7 @@ bpfioctl(dev, cmd, addr, flags, td)
break;
case FIOGETOWN:
- *(int *)addr = fgetown(d->bd_sigio);
+ *(int *)addr = fgetown(&d->bd_sigio);
break;
/* This is deprecated, FIOSETOWN should be used instead. */
@@ -876,7 +876,7 @@ bpfioctl(dev, cmd, addr, flags, td)
/* This is deprecated, FIOGETOWN should be used instead. */
case TIOCGPGRP:
- *(int *)addr = -fgetown(d->bd_sigio);
+ *(int *)addr = -fgetown(&d->bd_sigio);
break;
case BIOCSRSIG: /* Set receive signal */
diff --git a/sys/net/if_tap.c b/sys/net/if_tap.c
index 0d46639..5cdeaf7 100644
--- a/sys/net/if_tap.c
+++ b/sys/net/if_tap.c
@@ -709,7 +709,7 @@ tapioctl(dev, cmd, data, flag, td)
return (fsetown(*(int *)data, &tp->tap_sigio));
case FIOGETOWN:
- *(int *)data = fgetown(tp->tap_sigio);
+ *(int *)data = fgetown(&tp->tap_sigio);
return (0);
/* this is deprecated, FIOSETOWN should be used instead */
@@ -718,7 +718,7 @@ tapioctl(dev, cmd, data, flag, td)
/* this is deprecated, FIOGETOWN should be used instead */
case TIOCGPGRP:
- *(int *)data = -fgetown(tp->tap_sigio);
+ *(int *)data = -fgetown(&tp->tap_sigio);
return (0);
/* VMware/VMnet port ioctl's */
diff --git a/sys/net/if_tun.c b/sys/net/if_tun.c
index b4015d7..cb9cb69 100644
--- a/sys/net/if_tun.c
+++ b/sys/net/if_tun.c
@@ -622,7 +622,7 @@ tunioctl(dev_t dev, u_long cmd, caddr_t data, int flag, struct thread *td)
return (fsetown(*(int *)data, &tp->tun_sigio));
case FIOGETOWN:
- *(int *)data = fgetown(tp->tun_sigio);
+ *(int *)data = fgetown(&tp->tun_sigio);
return (0);
/* This is deprecated, FIOSETOWN should be used instead. */
@@ -631,7 +631,7 @@ tunioctl(dev_t dev, u_long cmd, caddr_t data, int flag, struct thread *td)
/* This is deprecated, FIOGETOWN should be used instead. */
case TIOCGPGRP:
- *(int *)data = -fgetown(tp->tun_sigio);
+ *(int *)data = -fgetown(&tp->tun_sigio);
return (0);
default:
diff --git a/sys/sys/filedesc.h b/sys/sys/filedesc.h
index 92077d8..7fc5182 100644
--- a/sys/sys/filedesc.h
+++ b/sys/sys/filedesc.h
@@ -154,7 +154,7 @@ struct filedesc *fdinit(struct thread *td);
struct filedesc *fdshare(struct proc *p);
void ffree(struct file *fp);
static __inline struct file * fget_locked(struct filedesc *fdp, int fd);
-pid_t fgetown(struct sigio *sigio);
+pid_t fgetown(struct sigio **sigiop);
int fsetown(pid_t pgid, struct sigio **sigiop);
void funsetown(struct sigio **sigiop);
void funsetownlst(struct sigiolst *sigiolst);
OpenPOWER on IntegriCloud