Changes in 4.19.307
PCI: mediatek: Clear interrupt status before dispatching handler
include/linux/units.h: add helpers for kelvin to/from Celsius conversion
units: Add Watt units
units: change from 'L' to 'UL'
units: add the HZ macros
serial: sc16is7xx: set safe default SPI clock frequency
driver core: add device probe log helper
spi: introduce SPI_MODE_X_MASK macro
serial: sc16is7xx: add check for unsupported SPI modes during probe
ext4: allow for the last group to be marked as trimmed
crypto: api - Disallow identical driver names
PM: hibernate: Enforce ordering during image compression/decompression
hwrng: core - Fix page fault dead lock on mmap-ed hwrng
rpmsg: virtio: Free driver_override when rpmsg_remove()
parisc/firmware: Fix F-extend for PDC addresses
nouveau/vmm: don't set addr on the fail path to avoid warning
block: Remove special-casing of compound pages
powerpc: Use always instead of always-y in for crtsavres.o
x86/CPU/AMD: Fix disabling XSAVES on AMD family 0x17 due to erratum
driver core: Annotate dev_err_probe() with __must_check
Revert "driver core: Annotate dev_err_probe() with __must_check"
driver code: print symbolic error code
drivers: core: fix kernel-doc markup for dev_err_probe()
net/smc: fix illegal rmb_desc access in SMC-D connection dump
vlan: skip nested type that is not IFLA_VLAN_QOS_MAPPING
llc: make llc_ui_sendmsg() more robust against bonding changes
llc: Drop support for ETH_P_TR_802_2.
net/rds: Fix UBSAN: array-index-out-of-bounds in rds_cmsg_recv
tracing: Ensure visibility when inserting an element into tracing_map
tcp: Add memory barrier to tcp_push()
netlink: fix potential sleeping issue in mqueue_flush_file
net/mlx5: Use kfree(ft->g) in arfs_create_groups()
net/mlx5e: fix a double-free in arfs_create_groups
netfilter: nf_tables: restrict anonymous set and map names to 16 bytes
fjes: fix memleaks in fjes_hw_setup
net: fec: fix the unhandled context fault from smmu
btrfs: don't warn if discard range is not aligned to sector
btrfs: defrag: reject unknown flags of btrfs_ioctl_defrag_range_args
netfilter: nf_tables: reject QUEUE/DROP verdict parameters
gpiolib: acpi: Ignore touchpad wakeup on GPD G1619-04
drm: Don't unref the same fb many times by mistake due to deadlock handling
drm/bridge: nxp-ptn3460: fix i2c_master_send() error checking
drm/bridge: nxp-ptn3460: simplify some error checking
drm/exynos: gsc: minor fix for loop iteration in gsc_runtime_resume
gpio: eic-sprd: Clear interrupt after set the interrupt type
mips: Call lose_fpu(0) before initializing fcr31 in mips_set_personality_nan
tick/sched: Preserve number of idle sleeps across CPU hotplug events
x86/entry/ia32: Ensure s32 is sign extended to s64
net/sched: cbs: Fix not adding cbs instance to list
powerpc/mm: Fix null-pointer dereference in pgtable_cache_add
powerpc: Fix build error due to is_valid_bugaddr()
powerpc/mm: Fix build failures due to arch_reserved_kernel_pages()
powerpc/lib: Validate size for vector operations
audit: Send netlink ACK before setting connection in auditd_set
ACPI: video: Add quirk for the Colorful X15 AT 23 Laptop
PNP: ACPI: fix fortify warning
ACPI: extlog: fix NULL pointer dereference check
FS:JFS:UBSAN:array-index-out-of-bounds in dbAdjTree
UBSAN: array-index-out-of-bounds in dtSplitRoot
jfs: fix slab-out-of-bounds Read in dtSearch
jfs: fix array-index-out-of-bounds in dbAdjTree
jfs: fix uaf in jfs_evict_inode
pstore/ram: Fix crash when setting number of cpus to an odd number
crypto: stm32/crc32 - fix parsing list of devices
afs: fix the usage of read_seqbegin_or_lock() in afs_find_server*()
rxrpc_find_service_conn_rcu: fix the usage of read_seqbegin_or_lock()
jfs: fix array-index-out-of-bounds in diNewExt
s390/ptrace: handle setting of fpc register correctly
KVM: s390: fix setting of fpc register
SUNRPC: Fix a suspicious RCU usage warning
ext4: fix inconsistent between segment fstrim and full fstrim
ext4: unify the type of flexbg_size to unsigned int
ext4: remove unnecessary check from alloc_flex_gd()
ext4: avoid online resizing failures due to oversized flex bg
scsi: lpfc: Fix possible file string name overflow when updating firmware
PCI: Add no PM reset quirk for NVIDIA Spectrum devices
bonding: return -ENOMEM instead of BUG in alb_upper_dev_walk
ARM: dts: imx7s: Fix lcdif compatible
ARM: dts: imx7s: Fix nand-controller #size-cells
wifi: ath9k: Fix potential array-index-out-of-bounds read in ath9k_htc_txstatus()
bpf: Add map and need_defer parameters to .map_fd_put_ptr()
scsi: libfc: Don't schedule abort twice
scsi: libfc: Fix up timeout error in fc_fcp_rec_error()
ARM: dts: rockchip: fix rk3036 hdmi ports node
ARM: dts: imx25/27-eukrea: Fix RTC node name
ARM: dts: imx: Use flash@0,0 pattern
ARM: dts: imx27: Fix sram node
ARM: dts: imx1: Fix sram node
ARM: dts: imx27-apf27dev: Fix LED name
ARM: dts: imx23-sansa: Use preferred i2c-gpios properties
ARM: dts: imx23/28: Fix the DMA controller node name
md: Whenassemble the array, consult the superblock of the freshest device
wifi: rtl8xxxu: Add additional USB IDs for RTL8192EU devices
wifi: rtlwifi: rtl8723{be,ae}: using calculate_bit_shift()
wifi: cfg80211: free beacon_ies when overridden from hidden BSS
f2fs: fix to check return value of f2fs_reserve_new_block()
ASoC: doc: Fix undefined SND_SOC_DAPM_NOPM argument
fast_dput(): handle underflows gracefully
RDMA/IPoIB: Fix error code return in ipoib_mcast_join
drm/drm_file: fix use of uninitialized variable
drm/framebuffer: Fix use of uninitialized variable
drm/mipi-dsi: Fix detach call without attach
media: stk1160: Fixed high volume of stk1160_dbg messages
media: rockchip: rga: fix swizzling for RGB formats
PCI: add INTEL_HDA_ARL to pci_ids.h
ALSA: hda: Intel: add HDA_ARL PCI ID support
drm/exynos: Call drm_atomic_helper_shutdown() at shutdown/unbind time
IB/ipoib: Fix mcast list locking
media: ddbridge: fix an error code problem in ddb_probe
drm/msm/dpu: Ratelimit framedone timeout msgs
clk: hi3620: Fix memory leak in hi3620_mmc_clk_init()
clk: mmp: pxa168: Fix memory leak in pxa168_clk_init()
drm/amdgpu: Let KFD sync with VM fences
drm/amdgpu: Drop 'fence' check in 'to_amdgpu_amdkfd_fence()'
leds: trigger: panic: Don't register panic notifier if creating the trigger failed
um: Fix naming clash between UML and scheduler
um: Don't use vfprintf() for os_info()
um: net: Fix return type of uml_net_start_xmit()
mfd: ti_am335x_tscadc: Fix TI SoC dependencies
PCI: Only override AMD USB controller if required
usb: hub: Replace hardcoded quirk value with BIT() macro
libsubcmd: Fix memory leak in uniq()
virtio_net: Fix "‘%d’ directive writing between 1 and 11 bytes into a region of size 10" warnings
blk-mq: fix IO hang from sbitmap wakeup race
ceph: fix deadlock or deadcode of misusing dget()
drm/amdgpu: Release 'adev->pm.fw' before return in 'amdgpu_device_need_post()'
wifi: cfg80211: fix RCU dereference in __cfg80211_bss_update
scsi: isci: Fix an error code problem in isci_io_request_build()
net: remove unneeded break
ixgbe: Remove non-inclusive language
ixgbe: Refactor returning internal error codes
ixgbe: Refactor overtemp event handling
ixgbe: Fix an error handling path in ixgbe_read_iosf_sb_reg_x550()
ipv6: Ensure natural alignment of const ipv6 loopback and router addresses
llc: call sock_orphan() at release time
netfilter: nf_log: replace BUG_ON by WARN_ON_ONCE when putting logger
net: ipv4: fix a memleak in ip_setup_cork
af_unix: fix lockdep positive in sk_diag_dump_icons()
net: sysfs: Fix /sys/class/net/<iface> path
HID: apple: Add support for the 2021 Magic Keyboard
HID: apple: Swap the Fn and Left Control keys on Apple keyboards
HID: apple: Add 2021 magic keyboard FN key mapping
bonding: remove print in bond_verify_device_path
dmaengine: fix is_slave_direction() return false when DMA_DEV_TO_DEV
phy: ti: phy-omap-usb2: Fix NULL pointer dereference for SRP
atm: idt77252: fix a memleak in open_card_ubr0
hwmon: (aspeed-pwm-tacho) mutex for tach reading
hwmon: (coretemp) Fix out-of-bounds memory access
hwmon: (coretemp) Fix bogus core_id to attr name mapping
inet: read sk->sk_family once in inet_recv_error()
rxrpc: Fix response to PING RESPONSE ACKs to a dead call
tipc: Check the bearer type before calling tipc_udp_nl_bearer_add()
ppp_async: limit MRU to 64K
netfilter: nft_compat: reject unused compat flag
netfilter: nft_compat: restrict match/target protocol to u16
net/af_iucv: clean up a try_then_request_module()
USB: serial: qcserial: add new usb-id for Dell Wireless DW5826e
USB: serial: option: add Fibocom FM101-GL variant
USB: serial: cp210x: add ID for IMST iM871A-USB
Input: atkbd - skip ATKBD_CMD_SETLEDS when skipping ATKBD_CMD_GETID
vhost: use kzalloc() instead of kmalloc() followed by memset()
hrtimer: Report offline hrtimer enqueue
btrfs: forbid creating subvol qgroups
btrfs: send: return EOPNOTSUPP on unknown flags
spi: ppc4xx: Drop write-only variable
ASoC: rt5645: Fix deadlock in rt5645_jack_detect_work()
Documentation: net-sysfs: describe missing statistics
net: sysfs: Fix /sys/class/net/<iface> path for statistics
MIPS: Add 'memory' clobber to csum_ipv6_magic() inline assembler
i40e: Fix waiting for queues of all VSIs to be disabled
tracing/trigger: Fix to return error if failed to alloc snapshot
mm/writeback: fix possible divide-by-zero in wb_dirty_limits(), again
HID: wacom: generic: Avoid reporting a serial of '0' to userspace
HID: wacom: Do not register input devices until after hid_hw_start
USB: hub: check for alternate port before enabling A_ALT_HNP_SUPPORT
usb: f_mass_storage: forbid async queue when shutdown happen
scsi: Revert "scsi: fcoe: Fix potential deadlock on &fip->ctlr_lock"
firewire: core: correct documentation of fw_csr_string() kernel API
nfc: nci: free rx_data_reassembly skb on NCI device cleanup
xen-netback: properly sync TX responses
binder: signal epoll threads of self-work
ext4: fix double-free of blocks due to wrong extents moved_len
staging: iio: ad5933: fix type mismatch regression
ring-buffer: Clean ring_buffer_poll_wait() error return
serial: max310x: set default value when reading clock ready bit
serial: max310x: improve crystal stable clock detection
x86/Kconfig: Transmeta Crusoe is CPU family 5, not 6
x86/mm/ident_map: Use gbpages only where full GB page should be mapped.
ALSA: hda/conexant: Add quirk for SWS JS201D
nilfs2: fix data corruption in dsync block recovery for small block sizes
nilfs2: fix hang in nilfs_lookup_dirty_data_buffers()
nfp: use correct macro for LengthSelect in BAR config
irqchip/irq-brcmstb-l2: Add write memory barrier before exit
pmdomain: core: Move the unused cleanup to a _sync initcall
Revert "md/raid5: Wait for MD_SB_CHANGE_PENDING in raid5d"
sched/membarrier: reduce the ability to hammer on sys_membarrier
nilfs2: fix potential bug in end_buffer_async_write
lsm: new security_file_ioctl_compat() hook
netfilter: nf_tables: fix pointer math issue in nft_byteorder_eval()
Linux 4.19.307
Change-Id: Ib05aec445afe9920e2502bcfce1c52db76e27139
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
243 lines
8.8 KiB
C
243 lines
8.8 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
/*
|
|
* syscall_wrapper.h - x86 specific wrappers to syscall definitions
|
|
*/
|
|
|
|
#ifndef _ASM_X86_SYSCALL_WRAPPER_H
|
|
#define _ASM_X86_SYSCALL_WRAPPER_H
|
|
|
|
struct pt_regs;
|
|
|
|
/* Mapping of registers to parameters for syscalls on x86-64 and x32 */
|
|
#define SC_X86_64_REGS_TO_ARGS(x, ...) \
|
|
__MAP(x,__SC_ARGS \
|
|
,,regs->di,,regs->si,,regs->dx \
|
|
,,regs->r10,,regs->r8,,regs->r9) \
|
|
|
|
|
|
/* SYSCALL_PT_ARGS is Adapted from s390x */
|
|
#define SYSCALL_PT_ARG6(m, t1, t2, t3, t4, t5, t6) \
|
|
SYSCALL_PT_ARG5(m, t1, t2, t3, t4, t5), m(t6, (regs->bp))
|
|
#define SYSCALL_PT_ARG5(m, t1, t2, t3, t4, t5) \
|
|
SYSCALL_PT_ARG4(m, t1, t2, t3, t4), m(t5, (regs->di))
|
|
#define SYSCALL_PT_ARG4(m, t1, t2, t3, t4) \
|
|
SYSCALL_PT_ARG3(m, t1, t2, t3), m(t4, (regs->si))
|
|
#define SYSCALL_PT_ARG3(m, t1, t2, t3) \
|
|
SYSCALL_PT_ARG2(m, t1, t2), m(t3, (regs->dx))
|
|
#define SYSCALL_PT_ARG2(m, t1, t2) \
|
|
SYSCALL_PT_ARG1(m, t1), m(t2, (regs->cx))
|
|
#define SYSCALL_PT_ARG1(m, t1) m(t1, (regs->bx))
|
|
#define SYSCALL_PT_ARGS(x, ...) SYSCALL_PT_ARG##x(__VA_ARGS__)
|
|
|
|
#define __SC_COMPAT_CAST(t, a) \
|
|
(__typeof(__builtin_choose_expr(__TYPE_IS_L(t), 0, 0U))) \
|
|
(unsigned int)a
|
|
|
|
/* Mapping of registers to parameters for syscalls on i386 */
|
|
#define SC_IA32_REGS_TO_ARGS(x, ...) \
|
|
SYSCALL_PT_ARGS(x, __SC_COMPAT_CAST, \
|
|
__MAP(x, __SC_TYPE, __VA_ARGS__)) \
|
|
|
|
#ifdef CONFIG_IA32_EMULATION
|
|
/*
|
|
* For IA32 emulation, we need to handle "compat" syscalls *and* create
|
|
* additional wrappers (aptly named __ia32_sys_xyzzy) which decode the
|
|
* ia32 regs in the proper order for shared or "common" syscalls. As some
|
|
* syscalls may not be implemented, we need to expand COND_SYSCALL in
|
|
* kernel/sys_ni.c and SYS_NI in kernel/time/posix-stubs.c to cover this
|
|
* case as well.
|
|
*/
|
|
#define __IA32_COMPAT_SYS_STUBx(x, name, ...) \
|
|
asmlinkage long __ia32_compat_sys##name(const struct pt_regs *regs);\
|
|
ALLOW_ERROR_INJECTION(__ia32_compat_sys##name, ERRNO); \
|
|
asmlinkage long __ia32_compat_sys##name(const struct pt_regs *regs)\
|
|
{ \
|
|
return __se_compat_sys##name(SC_IA32_REGS_TO_ARGS(x,__VA_ARGS__));\
|
|
} \
|
|
|
|
#define __IA32_SYS_STUBx(x, name, ...) \
|
|
asmlinkage long __ia32_sys##name(const struct pt_regs *regs); \
|
|
ALLOW_ERROR_INJECTION(__ia32_sys##name, ERRNO); \
|
|
asmlinkage long __ia32_sys##name(const struct pt_regs *regs) \
|
|
{ \
|
|
return __se_sys##name(SC_IA32_REGS_TO_ARGS(x,__VA_ARGS__));\
|
|
}
|
|
|
|
/*
|
|
* To keep the naming coherent, re-define SYSCALL_DEFINE0 to create an alias
|
|
* named __ia32_sys_*()
|
|
*/
|
|
|
|
#define SYSCALL_DEFINE0(sname) \
|
|
SYSCALL_METADATA(_##sname, 0); \
|
|
asmlinkage long __x64_sys_##sname(const struct pt_regs *__unused);\
|
|
ALLOW_ERROR_INJECTION(__x64_sys_##sname, ERRNO); \
|
|
SYSCALL_ALIAS(__ia32_sys_##sname, __x64_sys_##sname); \
|
|
asmlinkage long __x64_sys_##sname(const struct pt_regs *__unused)
|
|
|
|
#define COND_SYSCALL(name) \
|
|
asmlinkage __weak long __x64_sys_##name(const struct pt_regs *__unused) \
|
|
{ \
|
|
return sys_ni_syscall(); \
|
|
} \
|
|
asmlinkage __weak long __ia32_sys_##name(const struct pt_regs *__unused)\
|
|
{ \
|
|
return sys_ni_syscall(); \
|
|
}
|
|
|
|
#define SYS_NI(name) \
|
|
SYSCALL_ALIAS(__x64_sys_##name, sys_ni_posix_timers); \
|
|
SYSCALL_ALIAS(__ia32_sys_##name, sys_ni_posix_timers)
|
|
|
|
#else /* CONFIG_IA32_EMULATION */
|
|
#define __IA32_COMPAT_SYS_STUBx(x, name, ...)
|
|
#define __IA32_SYS_STUBx(x, fullname, name, ...)
|
|
#endif /* CONFIG_IA32_EMULATION */
|
|
|
|
|
|
#ifdef CONFIG_X86_X32
|
|
/*
|
|
* For the x32 ABI, we need to create a stub for compat_sys_*() which is aware
|
|
* of the x86-64-style parameter ordering of x32 syscalls. The syscalls common
|
|
* with x86_64 obviously do not need such care.
|
|
*/
|
|
#define __X32_COMPAT_SYS_STUBx(x, name, ...) \
|
|
asmlinkage long __x32_compat_sys##name(const struct pt_regs *regs);\
|
|
ALLOW_ERROR_INJECTION(__x32_compat_sys##name, ERRNO); \
|
|
asmlinkage long __x32_compat_sys##name(const struct pt_regs *regs)\
|
|
{ \
|
|
return __se_compat_sys##name(SC_X86_64_REGS_TO_ARGS(x,__VA_ARGS__));\
|
|
} \
|
|
|
|
#else /* CONFIG_X86_X32 */
|
|
#define __X32_COMPAT_SYS_STUBx(x, name, ...)
|
|
#endif /* CONFIG_X86_X32 */
|
|
|
|
|
|
#ifdef CONFIG_COMPAT
|
|
/*
|
|
* Compat means IA32_EMULATION and/or X86_X32. As they use a different
|
|
* mapping of registers to parameters, we need to generate stubs for each
|
|
* of them.
|
|
*/
|
|
#define COMPAT_SYSCALL_DEFINEx(x, name, ...) \
|
|
static long __se_compat_sys##name(__MAP(x,__SC_LONG,__VA_ARGS__)); \
|
|
static inline long __do_compat_sys##name(__MAP(x,__SC_DECL,__VA_ARGS__));\
|
|
__IA32_COMPAT_SYS_STUBx(x, name, __VA_ARGS__) \
|
|
__X32_COMPAT_SYS_STUBx(x, name, __VA_ARGS__) \
|
|
static long __se_compat_sys##name(__MAP(x,__SC_LONG,__VA_ARGS__)) \
|
|
{ \
|
|
return __do_compat_sys##name(__MAP(x,__SC_DELOUSE,__VA_ARGS__));\
|
|
} \
|
|
static inline long __do_compat_sys##name(__MAP(x,__SC_DECL,__VA_ARGS__))
|
|
|
|
/*
|
|
* As some compat syscalls may not be implemented, we need to expand
|
|
* COND_SYSCALL_COMPAT in kernel/sys_ni.c and COMPAT_SYS_NI in
|
|
* kernel/time/posix-stubs.c to cover this case as well.
|
|
*/
|
|
#define COND_SYSCALL_COMPAT(name) \
|
|
asmlinkage __weak long __ia32_compat_sys_##name( \
|
|
const struct pt_regs *__unused) \
|
|
{ \
|
|
return sys_ni_syscall(); \
|
|
} \
|
|
cond_syscall(__x32_compat_sys_##name)
|
|
|
|
#define COMPAT_SYS_NI(name) \
|
|
SYSCALL_ALIAS(__ia32_compat_sys_##name, sys_ni_posix_timers); \
|
|
SYSCALL_ALIAS(__x32_compat_sys_##name, sys_ni_posix_timers)
|
|
|
|
#endif /* CONFIG_COMPAT */
|
|
|
|
|
|
/*
|
|
* Instead of the generic __SYSCALL_DEFINEx() definition, this macro takes
|
|
* struct pt_regs *regs as the only argument of the syscall stub named
|
|
* __x64_sys_*(). It decodes just the registers it needs and passes them on to
|
|
* the __se_sys_*() wrapper performing sign extension and then to the
|
|
* __do_sys_*() function doing the actual job. These wrappers and functions
|
|
* are inlined (at least in very most cases), meaning that the assembly looks
|
|
* as follows (slightly re-ordered for better readability):
|
|
*
|
|
* <__x64_sys_recv>: <-- syscall with 4 parameters
|
|
* callq <__fentry__>
|
|
*
|
|
* mov 0x70(%rdi),%rdi <-- decode regs->di
|
|
* mov 0x68(%rdi),%rsi <-- decode regs->si
|
|
* mov 0x60(%rdi),%rdx <-- decode regs->dx
|
|
* mov 0x38(%rdi),%rcx <-- decode regs->r10
|
|
*
|
|
* xor %r9d,%r9d <-- clear %r9
|
|
* xor %r8d,%r8d <-- clear %r8
|
|
*
|
|
* callq __sys_recvfrom <-- do the actual work in __sys_recvfrom()
|
|
* which takes 6 arguments
|
|
*
|
|
* cltq <-- extend return value to 64-bit
|
|
* retq <-- return
|
|
*
|
|
* This approach avoids leaking random user-provided register content down
|
|
* the call chain.
|
|
*
|
|
* If IA32_EMULATION is enabled, this macro generates an additional wrapper
|
|
* named __ia32_sys_*() which decodes the struct pt_regs *regs according
|
|
* to the i386 calling convention (bx, cx, dx, si, di, bp).
|
|
*/
|
|
#define __SYSCALL_DEFINEx(x, name, ...) \
|
|
asmlinkage long __x64_sys##name(const struct pt_regs *regs); \
|
|
ALLOW_ERROR_INJECTION(__x64_sys##name, ERRNO); \
|
|
static long __se_sys##name(__MAP(x,__SC_LONG,__VA_ARGS__)); \
|
|
static inline long __do_sys##name(__MAP(x,__SC_DECL,__VA_ARGS__));\
|
|
asmlinkage long __x64_sys##name(const struct pt_regs *regs) \
|
|
{ \
|
|
return __se_sys##name(SC_X86_64_REGS_TO_ARGS(x,__VA_ARGS__));\
|
|
} \
|
|
__IA32_SYS_STUBx(x, name, __VA_ARGS__) \
|
|
static long __se_sys##name(__MAP(x,__SC_LONG,__VA_ARGS__)) \
|
|
{ \
|
|
long ret = __do_sys##name(__MAP(x,__SC_CAST,__VA_ARGS__));\
|
|
__MAP(x,__SC_TEST,__VA_ARGS__); \
|
|
__PROTECT(x, ret,__MAP(x,__SC_ARGS,__VA_ARGS__)); \
|
|
return ret; \
|
|
} \
|
|
static inline long __do_sys##name(__MAP(x,__SC_DECL,__VA_ARGS__))
|
|
|
|
/*
|
|
* As the generic SYSCALL_DEFINE0() macro does not decode any parameters for
|
|
* obvious reasons, and passing struct pt_regs *regs to it in %rdi does not
|
|
* hurt, we only need to re-define it here to keep the naming congruent to
|
|
* SYSCALL_DEFINEx() -- which is essential for the COND_SYSCALL() and SYS_NI()
|
|
* macros to work correctly.
|
|
*/
|
|
#ifndef SYSCALL_DEFINE0
|
|
#define SYSCALL_DEFINE0(sname) \
|
|
SYSCALL_METADATA(_##sname, 0); \
|
|
asmlinkage long __x64_sys_##sname(const struct pt_regs *__unused);\
|
|
ALLOW_ERROR_INJECTION(__x64_sys_##sname, ERRNO); \
|
|
asmlinkage long __x64_sys_##sname(const struct pt_regs *__unused)
|
|
#endif
|
|
|
|
#ifndef COND_SYSCALL
|
|
#define COND_SYSCALL(name) \
|
|
asmlinkage __weak long __x64_sys_##name(const struct pt_regs *__unused) \
|
|
{ \
|
|
return sys_ni_syscall(); \
|
|
}
|
|
#endif
|
|
|
|
#ifndef SYS_NI
|
|
#define SYS_NI(name) SYSCALL_ALIAS(__x64_sys_##name, sys_ni_posix_timers);
|
|
#endif
|
|
|
|
|
|
/*
|
|
* For VSYSCALLS, we need to declare these three syscalls with the new
|
|
* pt_regs-based calling convention for in-kernel use.
|
|
*/
|
|
asmlinkage long __x64_sys_getcpu(const struct pt_regs *regs);
|
|
asmlinkage long __x64_sys_gettimeofday(const struct pt_regs *regs);
|
|
asmlinkage long __x64_sys_time(const struct pt_regs *regs);
|
|
|
|
#endif /* _ASM_X86_SYSCALL_WRAPPER_H */
|