From 982049b5ceaeab23cfda7b5950bd0c85322a7b20 Mon Sep 17 00:00:00 2001 From: dmitry pervushin Date: Mon, 13 Jan 2020 19:39:52 +0100 Subject: kasan: use __no_sanitize_address for hypercalls Hypercall wrappers are very sensitive to register content inside. In case of KASAN enabled, we should not sanitize addresses as sanitizing clobbers registers. So, hypercall wrappers are now static __maybe_unused __no_sanitize_address instead of static inline when KASAN is enabled Bug 2835333 Change-Id: Ib16448205465b5a955b722e9282b6d2cbaa44a8b Signed-off-by: dmitry pervushin Reviewed-on: https://git-master.nvidia.com/r/c/linux-nvidia/+/2278522 Reviewed-by: Rahul Jain (SW-TEGRA) Reviewed-on: https://git-master.nvidia.com/r/c/linux-nvidia/+/2315988 Tested-by: mobile promotions Reviewed-by: automaticguardword Reviewed-by: Phoenix Jung Reviewed-by: mobile promotions GVS: Gerrit_Virtual_Submit --- include/soc/tegra/virt/syscalls.h | 44 +++++++++++++++++++++------------------ 1 file changed, 24 insertions(+), 20 deletions(-) (limited to 'include') diff --git a/include/soc/tegra/virt/syscalls.h b/include/soc/tegra/virt/syscalls.h index ddf7e0823..aa8e1dfb7 100644 --- a/include/soc/tegra/virt/syscalls.h +++ b/include/soc/tegra/virt/syscalls.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2014-2019, NVIDIA CORPORATION. All rights reserved. + * Copyright (C) 2014-2020, NVIDIA CORPORATION. All rights reserved. * * Hypervisor interfaces * @@ -200,8 +200,13 @@ struct hyp_server_page { #define _X7_X17 "x7", "x8", "x9", "x10", "x11", "x12", \ "x13", "x14", "x15", "x16", "x17" +#if IS_ENABLED(CONFIG_KASAN) +# define __INLINE __no_sanitize_address __maybe_unused +#else +# define __INLINE inline +#endif -static inline int hyp_read_gid(unsigned int *gid) +static __INLINE int hyp_read_gid(unsigned int *gid) { register uint64_t r0 asm("x0"); register uint64_t r1 asm("x1"); @@ -215,7 +220,7 @@ static inline int hyp_read_gid(unsigned int *gid) return (int)r0; } -static inline uint32_t hyp_read_vcpu_id(void) +static __INLINE uint32_t hyp_read_vcpu_id(void) { register uint64_t r0 asm("x0"); @@ -227,7 +232,7 @@ static inline uint32_t hyp_read_vcpu_id(void) return (uint32_t)r0; } -static inline int hyp_read_nguests(unsigned int *nguests) +static __INLINE int hyp_read_nguests(unsigned int *nguests) { register uint64_t r0 asm("x0"); register uint64_t r1 asm("x1"); @@ -241,7 +246,7 @@ static inline int hyp_read_nguests(unsigned int *nguests) return (int)r0; } -static inline int hyp_read_ivc_info(uint64_t *ivc_info_page_pa) +static __INLINE int hyp_read_ivc_info(uint64_t *ivc_info_page_pa) { register uint64_t r0 asm("x0"); register uint64_t r1 asm("x1"); @@ -255,7 +260,7 @@ static inline int hyp_read_ivc_info(uint64_t *ivc_info_page_pa) return (int)r0; } -static inline int hyp_read_ipa_pa_info(struct hyp_ipa_pa_info *info, +static __INLINE int hyp_read_ipa_pa_info(struct hyp_ipa_pa_info *info, unsigned int guestid, uint64_t ipa) { register uint64_t r0 asm("x0") = guestid; @@ -276,7 +281,7 @@ static inline int hyp_read_ipa_pa_info(struct hyp_ipa_pa_info *info, return (int)r0; } -static inline int hyp_raise_irq(unsigned int irq, unsigned int vmid) +static __INLINE int hyp_raise_irq(unsigned int irq, unsigned int vmid) { register uint64_t r0 asm("x0") = irq; register uint64_t r1 asm("x1") = vmid; @@ -289,7 +294,7 @@ static inline int hyp_raise_irq(unsigned int irq, unsigned int vmid) return (int)r0; } -static inline int hyp_read_guest_state(unsigned int vmid, unsigned int *state) +static __INLINE int hyp_read_guest_state(unsigned int vmid, unsigned int *state) { register uint64_t r0 asm("x0") = vmid; register uint64_t r1 asm("x1"); @@ -303,7 +308,7 @@ static inline int hyp_read_guest_state(unsigned int vmid, unsigned int *state) return (int)r0; } -static inline int hyp_read_hyp_info(uint64_t *hyp_info_page_pa) +static __INLINE int hyp_read_hyp_info(uint64_t *hyp_info_page_pa) { register uint64_t r0 asm("x0"); register uint64_t r1 asm("x1"); @@ -317,7 +322,7 @@ static inline int hyp_read_hyp_info(uint64_t *hyp_info_page_pa) return (int)r0; } -static inline int hyp_guest_reset(unsigned int id, +static __INLINE int hyp_guest_reset(unsigned int id, struct hyp_sys_state_info *out) { register uint64_t r0 asm("x0") = id; @@ -340,7 +345,7 @@ static inline int hyp_guest_reset(unsigned int id, return (int)r0; } -static inline uint64_t hyp_sysinfo_ipa(void) +static __INLINE uint64_t hyp_sysinfo_ipa(void) { register uint64_t r0 asm("x0"); @@ -352,7 +357,7 @@ static inline uint64_t hyp_sysinfo_ipa(void) return r0; } -static inline int hyp_trace_get_mask(uint64_t *mask) +static __INLINE int hyp_trace_get_mask(uint64_t *mask) { register uint64_t x0 asm("x0"); register uint64_t x1 asm("x1"); @@ -370,7 +375,7 @@ static inline int hyp_trace_get_mask(uint64_t *mask) return (int)x0; } -static inline int hyp_trace_set_mask(uint64_t mask) +static __INLINE int hyp_trace_set_mask(uint64_t mask) { register uint64_t x0 asm("x0") = mask; @@ -385,7 +390,7 @@ static inline int hyp_trace_set_mask(uint64_t mask) return (int)x0; } -static inline int hyp_read_uart_relay_info(uint64_t *ipa, uint64_t *size, +static __INLINE int hyp_read_uart_relay_info(uint64_t *ipa, uint64_t *size, uint64_t *num_channels, uint64_t *max_msg_size) { @@ -410,8 +415,7 @@ static inline int hyp_read_uart_relay_info(uint64_t *ipa, uint64_t *size, return (int)x0; } - -static inline int hyp_read_nvlog_reader_info(uint64_t *ipa, uint64_t *size, +static __INLINE int hyp_read_nvlog_reader_info(uint64_t *ipa, uint64_t *size, uint64_t *num_vms) { register uint64_t x0 asm("x0"); @@ -434,7 +438,7 @@ static inline int hyp_read_nvlog_reader_info(uint64_t *ipa, uint64_t *size, return (int)x0; } -static inline int hyp_read_nvlog_writer_info(uint64_t *ipa, uint64_t *size) +static __INLINE int hyp_read_nvlog_writer_info(uint64_t *ipa, uint64_t *size) { register uint64_t x0 asm("x0"); register uint64_t x1 asm("x1"); @@ -455,7 +459,7 @@ static inline int hyp_read_nvlog_writer_info(uint64_t *ipa, uint64_t *size) return (int)x0; } -static inline int hyp_read_err_info_get(uint64_t *ipa, uint64_t *buff_size, +static __INLINE int hyp_read_err_info_get(uint64_t *ipa, uint64_t *buff_size, unsigned int *async_err_arr_items, int *peer_err_irq_id, unsigned int *vcpu_cnt) { @@ -480,7 +484,7 @@ static inline int hyp_read_err_info_get(uint64_t *ipa, uint64_t *buff_size, return (int)r0; } -static inline int hyp_send_async_err_ack(uint64_t local_rd_idx) +static __INLINE int hyp_send_async_err_ack(uint64_t local_rd_idx) { register uint64_t r0 asm("x0") = local_rd_idx; @@ -492,7 +496,7 @@ static inline int hyp_send_async_err_ack(uint64_t local_rd_idx) return (int)r0; } -static inline int hyp_send_sync_err_ack(void) +static __INLINE int hyp_send_sync_err_ack(void) { register uint64_t r0 asm("x0"); -- cgit v1.2.2