Sun Jan 3 16:14:04 2021 UTC ()
Handle timerfd ioctls.


(thorpej)
diff -r1.14 -r1.14.8.1 src/sys/compat/linux32/common/linux32_ioctl.c

cvs diff -r1.14 -r1.14.8.1 src/sys/compat/linux32/common/linux32_ioctl.c (expand / switch to unified diff)

--- src/sys/compat/linux32/common/linux32_ioctl.c 2019/08/23 12:49:59 1.14
+++ src/sys/compat/linux32/common/linux32_ioctl.c 2021/01/03 16:14:04 1.14.8.1
@@ -1,14 +1,14 @@ @@ -1,14 +1,14 @@
1/* $NetBSD: linux32_ioctl.c,v 1.14 2019/08/23 12:49:59 maxv Exp $ */ 1/* $NetBSD: linux32_ioctl.c,v 1.14.8.1 2021/01/03 16:14:04 thorpej Exp $ */
2 2
3/*- 3/*-
4 * Copyright (c) 2006 Emmanuel Dreyfus, all rights reserved. 4 * Copyright (c) 2006 Emmanuel Dreyfus, all rights reserved.
5 * 5 *
6 * Redistribution and use in source and binary forms, with or without 6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions 7 * modification, are permitted provided that the following conditions
8 * are met: 8 * are met:
9 * 1. Redistributions of source code must retain the above copyright 9 * 1. Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer. 10 * notice, this list of conditions and the following disclaimer.
11 * 2. Redistributions in binary form must reproduce the above copyright 11 * 2. Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the 12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution. 13 * documentation and/or other materials provided with the distribution.
14 * 3. All advertising materials mentioning features or use of this software 14 * 3. All advertising materials mentioning features or use of this software
@@ -22,40 +22,43 @@ @@ -22,40 +22,43 @@
22 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,  22 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
23 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 23 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
24 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS  24 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS
25 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 25 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
26 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 26 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
27 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 27 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
28 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 28 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
29 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 29 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
30 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 30 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
31 * POSSIBILITY OF SUCH DAMAGE. 31 * POSSIBILITY OF SUCH DAMAGE.
32 */ 32 */
33 33
34#include <sys/cdefs.h> 34#include <sys/cdefs.h>
35__KERNEL_RCSID(0, "$NetBSD: linux32_ioctl.c,v 1.14 2019/08/23 12:49:59 maxv Exp $"); 35__KERNEL_RCSID(0, "$NetBSD: linux32_ioctl.c,v 1.14.8.1 2021/01/03 16:14:04 thorpej Exp $");
36 36
37#include <sys/types.h> 37#include <sys/types.h>
38#include <sys/param.h> 38#include <sys/param.h>
39#include <sys/time.h> 39#include <sys/time.h>
40#include <sys/ucred.h> 40#include <sys/ucred.h>
41#include <sys/ioctl.h> 41#include <sys/ioctl.h>
 42#include <sys/file.h>
 43#include <sys/filedesc.h>
42 44
43#include <compat/netbsd32/netbsd32.h> 45#include <compat/netbsd32/netbsd32.h>
44#include <compat/netbsd32/netbsd32_syscallargs.h> 46#include <compat/netbsd32/netbsd32_syscallargs.h>
45 47
46#include <compat/linux/common/linux_types.h> 48#include <compat/linux/common/linux_types.h>
47#include <compat/linux/common/linux_signal.h> 49#include <compat/linux/common/linux_signal.h>
48#include <compat/linux/common/linux_ipc.h> 50#include <compat/linux/common/linux_ipc.h>
 51#include <compat/linux/common/linux_ioctl.h>
49#include <compat/linux/common/linux_sem.h> 52#include <compat/linux/common/linux_sem.h>
50#include <compat/linux/linux_syscallargs.h> 53#include <compat/linux/linux_syscallargs.h>
51 54
52#include <compat/linux32/common/linux32_types.h> 55#include <compat/linux32/common/linux32_types.h>
53#include <compat/linux32/common/linux32_signal.h> 56#include <compat/linux32/common/linux32_signal.h>
54#include <compat/linux32/common/linux32_ioctl.h> 57#include <compat/linux32/common/linux32_ioctl.h>
55#include <compat/linux32/common/linux32_termios.h> 58#include <compat/linux32/common/linux32_termios.h>
56#include <compat/linux32/common/linux32_sysctl.h> 59#include <compat/linux32/common/linux32_sysctl.h>
57#include <compat/linux32/linux32_syscallargs.h> 60#include <compat/linux32/linux32_syscallargs.h>
58 61
59#include <compat/ossaudio/ossaudio.h> 62#include <compat/ossaudio/ossaudio.h>
60#include <compat/ossaudio/ossaudiovar.h> 63#include <compat/ossaudio/ossaudiovar.h>
61 64
@@ -70,28 +73,51 @@ linux32_sys_ioctl(struct lwp *l, const s @@ -70,28 +73,51 @@ linux32_sys_ioctl(struct lwp *l, const s
70 struct oss_sys_ioctl_args ossuap; 73 struct oss_sys_ioctl_args ossuap;
71 int group; 74 int group;
72 int error; 75 int error;
73 76
74 group = LINUX32_IOCGROUP((int)SCARG(uap, com)); 77 group = LINUX32_IOCGROUP((int)SCARG(uap, com));
75 78
76#ifdef DEBUG_LINUX 79#ifdef DEBUG_LINUX
77 printf("linux32_sys_ioctl(%d, 0x%x/\'%c\', %p)\n", SCARG(uap, fd), 80 printf("linux32_sys_ioctl(%d, 0x%x/\'%c\', %p)\n", SCARG(uap, fd),
78 SCARG(uap, com), (char)group, SCARG_P32(uap, data)); 81 SCARG(uap, com), (char)group, SCARG_P32(uap, data));
79#endif 82#endif
80 83
81 switch(group) { 84 switch(group) {
82 case 'T': 85 case 'T':
83 error = linux32_ioctl_termios(l, uap, retval); 86 {
 87 /*
 88 * Termios, the MIDI sequencer, and timerfd use 'T' to
 89 * identify the ioctl, so we have to differentiate them
 90 * in another way.
 91 *
 92 * (XXX We don't bother with MIDI here.)
 93 */
 94 struct file *fp;
 95
 96 if ((fp = fd_getfile(SCARG(uap, fd))) == NULL)
 97 return EBADF;
 98
 99 if (fp->f_type == DTYPE_TIMERFD) {
 100 struct linux_sys_ioctl_args ua;
 101 SCARG(&ua, fd) = SCARG(uap, fd);
 102 SCARG(&ua, com) = SCARG(uap, com);
 103 SCARG(&ua, data) = SCARG_P32(uap, data);
 104 error = linux_ioctl_timerfd(l, &ua, retval);
 105 } else {
 106 error = linux32_ioctl_termios(l, uap, retval);
 107 }
 108 fd_putfile(SCARG(uap, fd));
84 break; 109 break;
 110 }
85 case 'M': 111 case 'M':
86 case 'Q': 112 case 'Q':
87 case 'P': 113 case 'P':
88 SCARG(&ossuap, fd) = SCARG(uap, fd); 114 SCARG(&ossuap, fd) = SCARG(uap, fd);
89 SCARG(&ossuap, com) = (u_long)SCARG(uap, com); 115 SCARG(&ossuap, com) = (u_long)SCARG(uap, com);
90 SCARG(&ossuap, data) = SCARG_P32(uap, data); 116 SCARG(&ossuap, data) = SCARG_P32(uap, data);
91 switch (group) { 117 switch (group) {
92 case 'M': 118 case 'M':
93 error = oss_ioctl_mixer(l, &ossuap, retval); 119 error = oss_ioctl_mixer(l, &ossuap, retval);
94 break; 120 break;
95 case 'Q': 121 case 'Q':
96 error = oss_ioctl_sequencer(l, &ossuap, retval); 122 error = oss_ioctl_sequencer(l, &ossuap, retval);
97 break; 123 break;