xref: /netbsd/sys/kern/compat_stub.c (revision a0b1e536)
1*a0b1e536Sandvar /* $NetBSD: compat_stub.c,v 1.22 2021/08/09 20:49:10 andvar Exp $	*/
2cc17ee2eSpgoyette 
3cc17ee2eSpgoyette /*-
4cc17ee2eSpgoyette  * Copyright (c) 2018 The NetBSD Foundation, Inc.
5cc17ee2eSpgoyette  * All rights reserved.
6cc17ee2eSpgoyette  *
7cc17ee2eSpgoyette  * This code is derived from software contributed to The NetBSD Foundation
8cc17ee2eSpgoyette  * by Paul Goyette
9cc17ee2eSpgoyette  *
10cc17ee2eSpgoyette  * Redistribution and use in source and binary forms, with or without
11cc17ee2eSpgoyette  * modification, are permitted provided that the following conditions
12cc17ee2eSpgoyette  * are met:
13cc17ee2eSpgoyette  * 1. Redistributions of source code must retain the above copyright
14cc17ee2eSpgoyette  *    notice, this list of conditions and the following disclaimer.
15cc17ee2eSpgoyette  * 2. Redistributions in binary form must reproduce the above copyright
16cc17ee2eSpgoyette  *    notice, this list of conditions and the following disclaimer in the
17cc17ee2eSpgoyette  *    documentation and/or other materials provided with the distribution.
18cc17ee2eSpgoyette  *
19cc17ee2eSpgoyette  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
20cc17ee2eSpgoyette  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
21cc17ee2eSpgoyette  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22cc17ee2eSpgoyette  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
23cc17ee2eSpgoyette  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24cc17ee2eSpgoyette  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25cc17ee2eSpgoyette  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26cc17ee2eSpgoyette  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27cc17ee2eSpgoyette  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28cc17ee2eSpgoyette  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29cc17ee2eSpgoyette  * POSSIBILITY OF SUCH DAMAGE.
30cc17ee2eSpgoyette  */
31cc17ee2eSpgoyette 
32cc17ee2eSpgoyette #include <sys/cdefs.h>
33cc17ee2eSpgoyette 
34cc17ee2eSpgoyette #ifdef _KERNEL_OPT
35cc17ee2eSpgoyette #include "opt_ntp.h"
36cc17ee2eSpgoyette #endif
37cc17ee2eSpgoyette 
38cc17ee2eSpgoyette #include <sys/systm.h>
39cc17ee2eSpgoyette #include <sys/compat_stub.h>
40cc17ee2eSpgoyette 
41cc17ee2eSpgoyette #ifdef NTP
42cc17ee2eSpgoyette #include <sys/timespec.h>
43cc17ee2eSpgoyette #include <sys/timex.h>
44cc17ee2eSpgoyette #endif
45cc17ee2eSpgoyette 
46cc17ee2eSpgoyette /*
47cc17ee2eSpgoyette  * Routine vectors for compat_50___sys_ntp_gettime
48cc17ee2eSpgoyette  *
49cc17ee2eSpgoyette  * MP-hooks not needed since the NTP code is not modular
50cc17ee2eSpgoyette  */
51cc17ee2eSpgoyette 
52cc17ee2eSpgoyette #ifdef NTP
53cc17ee2eSpgoyette void (*vec_ntp_gettime)(struct ntptimeval *) = ntp_gettime;
54cc17ee2eSpgoyette int (*vec_ntp_timestatus)(void) = ntp_timestatus;
55cc17ee2eSpgoyette void (*vec_ntp_adjtime1)(struct timex *) = ntp_adjtime1;
56cc17ee2eSpgoyette #else
57cc17ee2eSpgoyette void (*vec_ntp_gettime)(struct ntptimeval *) = NULL;
58cc17ee2eSpgoyette int (*vec_ntp_timestatus)(void) = NULL;
59cc17ee2eSpgoyette void (*vec_ntp_adjtime1)(struct timex *) = NULL;
60cc17ee2eSpgoyette #endif
61cc17ee2eSpgoyette 
62cc17ee2eSpgoyette /*
63cc17ee2eSpgoyette  * Routine vectors for sctp (called from within rtsock)
64cc17ee2eSpgoyette  *
65cc17ee2eSpgoyette  * MP-hooks not needed since the SCTP code is not modular
66c5aed5d2Spgoyette  *
67c5aed5d2Spgoyette  * For now, just point these at NULL.  Network initialization code
68c5aed5d2Spgoyette  * in if.c will overwrite these with correct values.  This is needed
69c5aed5d2Spgoyette  * to enable building of rumpkern library without creating circular
70c5aed5d2Spgoyette  * dependency with rumpnet library
71cc17ee2eSpgoyette  */
72cc17ee2eSpgoyette 
73cc17ee2eSpgoyette void (*vec_sctp_add_ip_address)(struct ifaddr *) = NULL;
74cc17ee2eSpgoyette void (*vec_sctp_delete_ip_address)(struct ifaddr *) = NULL;
75cc17ee2eSpgoyette 
76cc17ee2eSpgoyette 
77cc17ee2eSpgoyette /*
78*a0b1e536Sandvar  * usb device_info compatibility
79cc17ee2eSpgoyette  */
80314d436dSpgoyette struct usb_subr_fill_30_hook_t usb_subr_fill_30_hook;
81314d436dSpgoyette struct usb_subr_copy_30_hook_t usb_subr_copy_30_hook;
82cc17ee2eSpgoyette 
83cc17ee2eSpgoyette /*
84*a0b1e536Sandvar  * ccd device compatibility ioctl
85cc17ee2eSpgoyette  */
86cc17ee2eSpgoyette 
87cc17ee2eSpgoyette struct ccd_ioctl_60_hook_t ccd_ioctl_60_hook;
88cc17ee2eSpgoyette 
89cc17ee2eSpgoyette /*
90*a0b1e536Sandvar  * clockctl device compatibility ioctl
91cc17ee2eSpgoyette  */
92cc17ee2eSpgoyette 
93cc17ee2eSpgoyette struct clockctl_ioctl_50_hook_t clockctl_ioctl_50_hook;
94cc17ee2eSpgoyette 
95cc17ee2eSpgoyette /*
96*a0b1e536Sandvar  * if_sppp device compatibility ioctl subroutine
97cc17ee2eSpgoyette  */
98cc17ee2eSpgoyette 
99cc17ee2eSpgoyette struct sppp_params_50_hook_t sppp_params_50_hook;
100cc17ee2eSpgoyette 
101cc17ee2eSpgoyette /*
102*a0b1e536Sandvar  * cryptodev compatibility ioctl
103cc17ee2eSpgoyette  */
104cc17ee2eSpgoyette 
105cc17ee2eSpgoyette struct ocryptof_50_hook_t ocryptof_50_hook;
106cc17ee2eSpgoyette 
107cc17ee2eSpgoyette /*
108*a0b1e536Sandvar  * raidframe compatibility
109cc17ee2eSpgoyette  */
110314d436dSpgoyette struct raidframe_ioctl_50_hook_t raidframe_ioctl_50_hook;
111314d436dSpgoyette struct raidframe_ioctl_80_hook_t raidframe_ioctl_80_hook;
112bb872f68Schristos struct raidframe_netbsd32_ioctl_hook_t raidframe_netbsd32_ioctl_hook;
113cc17ee2eSpgoyette 
114cc17ee2eSpgoyette /*
115*a0b1e536Sandvar  * puffs compatibility
116cc17ee2eSpgoyette  */
117cc17ee2eSpgoyette 
118314d436dSpgoyette struct puffs_out_50_hook_t puffs_out_50_hook;
119314d436dSpgoyette struct puffs_in_50_hook_t puffs_in_50_hook;
120cc17ee2eSpgoyette 
121cc17ee2eSpgoyette /*
122*a0b1e536Sandvar  * wsevents compatibility
123cc17ee2eSpgoyette  */
124314d436dSpgoyette struct wscons_copyout_events_50_hook_t wscons_copyout_events_50_hook;
125cc17ee2eSpgoyette 
126cc17ee2eSpgoyette /*
127*a0b1e536Sandvar  * sysmon_power compatibility
128cc17ee2eSpgoyette  */
129cc17ee2eSpgoyette struct compat_sysmon_power_40_hook_t compat_sysmon_power_40_hook;
130cc17ee2eSpgoyette 
131cc17ee2eSpgoyette /*
132*a0b1e536Sandvar  * compat_bio compatibility
133cc17ee2eSpgoyette  */
134cc17ee2eSpgoyette struct compat_bio_30_hook_t compat_bio_30_hook;
135cc17ee2eSpgoyette 
136cc17ee2eSpgoyette /*
137*a0b1e536Sandvar  * vnd ioctl compatibility
138cc17ee2eSpgoyette  */
139cc17ee2eSpgoyette struct compat_vndioctl_30_hook_t compat_vndioctl_30_hook;
140cc17ee2eSpgoyette struct compat_vndioctl_50_hook_t compat_vndioctl_50_hook;
141cc17ee2eSpgoyette 
142cc17ee2eSpgoyette /*
143*a0b1e536Sandvar  * ieee80211 ioctl compatibility
144cc17ee2eSpgoyette  */
145314d436dSpgoyette struct ieee80211_ioctl_20_hook_t ieee80211_ioctl_20_hook;
146cc17ee2eSpgoyette 
147cc17ee2eSpgoyette /*
148*a0b1e536Sandvar  * if_43 compatibility
149cc17ee2eSpgoyette  */
150314d436dSpgoyette struct if_cvtcmd_43_hook_t if_cvtcmd_43_hook;
151314d436dSpgoyette struct if_ifioctl_43_hook_t if_ifioctl_43_hook;
152cc17ee2eSpgoyette 
153cc17ee2eSpgoyette /*
154*a0b1e536Sandvar  * if43_cvtcmd_20 compatibility
155cc17ee2eSpgoyette  */
156a0264c55Spgoyette struct if43_cvtcmd_20_hook_t if43_cvtcmd_20_hook;
157cc17ee2eSpgoyette 
158cc17ee2eSpgoyette /*
159f2c2830dSchristos  * tty 43 ioctl compatibility
160f2c2830dSchristos  */
161314d436dSpgoyette struct tty_ttioctl_43_hook_t tty_ttioctl_43_hook;
162f2c2830dSchristos 
163f2c2830dSchristos /*
1648bd61d50Spgoyette  * uipc_syscalls_40 compatibility
165cc17ee2eSpgoyette  */
166cc17ee2eSpgoyette struct uipc_syscalls_40_hook_t uipc_syscalls_40_hook;
167cc17ee2eSpgoyette 
168cc17ee2eSpgoyette /*
1698bd61d50Spgoyette  * uipc_socket_50 compatibility
1708bd61d50Spgoyette  */
1718bd61d50Spgoyette struct uipc_socket_50_setopt1_hook_t uipc_socket_50_setopt1_hook;
1728bd61d50Spgoyette struct uipc_socket_50_getopt1_hook_t uipc_socket_50_getopt1_hook;
1738bd61d50Spgoyette struct uipc_socket_50_sbts_hook_t uipc_socket_50_sbts_hook;
1748bd61d50Spgoyette 
1758bd61d50Spgoyette /*
176*a0b1e536Sandvar  * uipc_syscalls_50 compatibility
177cc17ee2eSpgoyette  */
178cc17ee2eSpgoyette struct uipc_syscalls_50_hook_t uipc_syscalls_50_hook;
179cc17ee2eSpgoyette 
180cc17ee2eSpgoyette /*
181*a0b1e536Sandvar  * rtsock 14 compatibility
182cc17ee2eSpgoyette  */
183314d436dSpgoyette struct rtsock_oifmsg_14_hook_t rtsock_oifmsg_14_hook;
184314d436dSpgoyette struct rtsock_iflist_14_hook_t rtsock_iflist_14_hook;
185cc17ee2eSpgoyette 
186cc17ee2eSpgoyette /*
187*a0b1e536Sandvar  * rtsock 50 compatibility
188cc17ee2eSpgoyette  */
189314d436dSpgoyette struct rtsock_iflist_50_hook_t rtsock_iflist_50_hook;
190314d436dSpgoyette struct rtsock_oifmsg_50_hook_t rtsock_oifmsg_50_hook;
191314d436dSpgoyette struct rtsock_rt_missmsg_50_hook_t rtsock_rt_missmsg_50_hook;
192314d436dSpgoyette struct rtsock_rt_ifmsg_50_hook_t rtsock_rt_ifmsg_50_hook;
193314d436dSpgoyette struct rtsock_rt_ifannouncemsg_50_hook_t rtsock_rt_ifannouncemsg_50_hook;
1948c6002cdSroy struct rtsock_rt_addrmsg_rt_50_hook_t rtsock_rt_addrmsg_rt_50_hook;
195f323200fSroy struct rtsock_rt_addrmsg_src_50_hook_t rtsock_rt_addrmsg_src_50_hook;
1968c6002cdSroy struct rtsock_rt_addrmsg_50_hook_t rtsock_rt_addrmsg_50_hook;
197314d436dSpgoyette struct rtsock_rt_ieee80211msg_50_hook_t rtsock_rt_ieee80211msg_50_hook;
198cc17ee2eSpgoyette 
199cc17ee2eSpgoyette /*
200*a0b1e536Sandvar  * rtsock 70 compatibility
201cc17ee2eSpgoyette  */
202314d436dSpgoyette struct rtsock_newaddr_70_hook_t rtsock_newaddr_70_hook;
203314d436dSpgoyette struct rtsock_iflist_70_hook_t rtsock_iflist_70_hook;
204cc17ee2eSpgoyette 
205cc17ee2eSpgoyette /*
206cc17ee2eSpgoyette  * modctl handler for old style OSTAT
207cc17ee2eSpgoyette  */
208cc17ee2eSpgoyette struct compat_modstat_80_hook_t compat_modstat_80_hook;
209cc17ee2eSpgoyette 
210cc17ee2eSpgoyette /*
211cc17ee2eSpgoyette  * mask for kern_sig_43's killpg (updated by compat_09)
212cc17ee2eSpgoyette  */
213cc17ee2eSpgoyette int kern_sig_43_pgid_mask = ~0;
214cc17ee2eSpgoyette 
215cc17ee2eSpgoyette /*
216cc17ee2eSpgoyette  * hook for kern_proc_32
217cc17ee2eSpgoyette  */
218314d436dSpgoyette struct kern_proc32_copyin_hook_t kern_proc32_copyin_hook;
219314d436dSpgoyette struct kern_proc32_base_hook_t kern_proc32_base_hook;
220cc17ee2eSpgoyette 
221cc17ee2eSpgoyette /*
222cc17ee2eSpgoyette  * Hook for sparc fpu code to check if a process is running
223cc17ee2eSpgoyette  * under sunos emulation
224cc17ee2eSpgoyette  */
225cc17ee2eSpgoyette struct get_emul_sunos_hook_t get_emul_sunos_hook;
226cc17ee2eSpgoyette 
227cc17ee2eSpgoyette /*
228cc17ee2eSpgoyette  * Hook for rnd_ioctl_50 callbacks
229cc17ee2eSpgoyette  */
230cc17ee2eSpgoyette struct rnd_ioctl_50_hook_t rnd_ioctl_50_hook;
231314d436dSpgoyette struct rnd_ioctl32_50_hook_t rnd_ioctl32_50_hook;
232cc17ee2eSpgoyette 
233cc17ee2eSpgoyette /*
234cc17ee2eSpgoyette  * Hooks for compat_60 ttioctl and ptmioctl
235cc17ee2eSpgoyette  */
236314d436dSpgoyette struct tty_ttioctl_60_hook_t tty_ttioctl_60_hook;
237314d436dSpgoyette struct tty_ptmioctl_60_hook_t tty_ptmioctl_60_hook;
238cc17ee2eSpgoyette 
239cc17ee2eSpgoyette /*
240cc17ee2eSpgoyette  * Hook for compat_10 openat
241cc17ee2eSpgoyette  */
242314d436dSpgoyette struct vfs_openat_10_hook_t vfs_openat_10_hook;
243cc17ee2eSpgoyette 
244cc17ee2eSpgoyette /*
245cc17ee2eSpgoyette  * Hook for compat_70_unp_addsockcred
246cc17ee2eSpgoyette  */
247314d436dSpgoyette struct uipc_unp_70_hook_t uipc_unp_70_hook;
248cc17ee2eSpgoyette 
249cc17ee2eSpgoyette /*
250cc17ee2eSpgoyette  * Hook for sysvipc50_sysctl
251cc17ee2eSpgoyette  */
252314d436dSpgoyette struct sysvipc_sysctl_50_hook_t sysvipc_sysctl_50_hook;
253cc17ee2eSpgoyette 
254cc17ee2eSpgoyette /*
255*a0b1e536Sandvar  * ifmedia_80 compatibility
256ea7b7964Smsaitoh  */
257ea7b7964Smsaitoh struct ifmedia_80_pre_hook_t ifmedia_80_pre_hook;
258ea7b7964Smsaitoh struct ifmedia_80_post_hook_t ifmedia_80_post_hook;
259ea7b7964Smsaitoh 
260ea7b7964Smsaitoh /*
261cc17ee2eSpgoyette  * Hook for 32-bit machine name
262cc17ee2eSpgoyette  *
263cc17ee2eSpgoyette  * This probably would be better placed in compat/netbsd32/netbsd32_mod.c
264cc17ee2eSpgoyette  * but the consumer code in linux32_exec_elf32.c is sometimes included in
265cc17ee2eSpgoyette  * the main kernel, and not in a compat_netbsd32 module.  (In particular,
266cc17ee2eSpgoyette  * this is true for i386 and sgimips.)
267cc17ee2eSpgoyette  */
268cc17ee2eSpgoyette struct netbsd32_machine32_hook_t netbsd32_machine32_hook;
2696848a6ddSchristos struct netbsd32_reg_validate_hook_t netbsd32_reg_validate_hook;
270743fbdcdSpgoyette 
271743fbdcdSpgoyette /*
272743fbdcdSpgoyette  * Hook for sendsig_sigcontext_16
273743fbdcdSpgoyette  */
274743fbdcdSpgoyette struct sendsig_sigcontext_16_hook_t sendsig_sigcontext_16_hook;
2757ff0c96aSpgoyette 
2767ff0c96aSpgoyette /*
27716e12c90Spgoyette  * Hooks for coredumps
2787ff0c96aSpgoyette  */
2797ff0c96aSpgoyette struct coredump_hook_t coredump_hook;
28016e12c90Spgoyette struct coredump_offset_hook_t coredump_offset_hook;
28116e12c90Spgoyette struct coredump_write_hook_t coredump_write_hook;
28216e12c90Spgoyette struct coredump_netbsd_hook_t coredump_netbsd_hook;
2830bf72676Spgoyette struct coredump_netbsd32_hook_t coredump_netbsd32_hook;
2843d0d0adbSchristos struct coredump_elf32_hook_t coredump_elf32_hook;
2853d0d0adbSchristos struct coredump_elf64_hook_t coredump_elf64_hook;
28616e12c90Spgoyette struct uvm_coredump_walkmap_hook_t uvm_coredump_walkmap_hook;
28716e12c90Spgoyette struct uvm_coredump_count_segs_hook_t uvm_coredump_count_segs_hook;
28816e12c90Spgoyette 
28916e12c90Spgoyette 
290