diff options
-rw-r--r-- | sys/dev/drm/drm_drv.h | 2 | ||||
-rw-r--r-- | sys/kern/kern_descrip.c | 11 | ||||
-rw-r--r-- | sys/kern/subr_log.c | 4 | ||||
-rw-r--r-- | sys/kern/sys_pipe.c | 4 | ||||
-rw-r--r-- | sys/kern/sys_socket.c | 4 | ||||
-rw-r--r-- | sys/kern/tty.c | 2 | ||||
-rw-r--r-- | sys/kern/uipc_syscalls.c | 6 | ||||
-rw-r--r-- | sys/net/bpf.c | 4 | ||||
-rw-r--r-- | sys/net/if_tap.c | 4 | ||||
-rw-r--r-- | sys/net/if_tun.c | 4 | ||||
-rw-r--r-- | sys/sys/filedesc.h | 2 |
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); |