summaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authordmitry pervushin <dpervushin@nvidia.com>2020-01-13 13:39:52 -0500
committermobile promotions <svcmobile_promotions@nvidia.com>2020-03-24 11:39:04 -0400
commit982049b5ceaeab23cfda7b5950bd0c85322a7b20 (patch)
tree62452b294f0c6b856bdbc5bcd37fa7afd11d2e03 /include
parent74f006cebaf29dded0e95ec4852ecb7b8eda537a (diff)
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 <dpervushin@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/c/linux-nvidia/+/2278522 Reviewed-by: Rahul Jain (SW-TEGRA) <rahuljain@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/c/linux-nvidia/+/2315988 Tested-by: mobile promotions <svcmobile_promotions@nvidia.com> Reviewed-by: automaticguardword <automaticguardword@nvidia.com> Reviewed-by: Phoenix Jung <pjung@nvidia.com> Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com> GVS: Gerrit_Virtual_Submit
Diffstat (limited to 'include')
-rw-r--r--include/soc/tegra/virt/syscalls.h44
1 files changed, 24 insertions, 20 deletions
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 @@
1/* 1/*
2 * Copyright (C) 2014-2019, NVIDIA CORPORATION. All rights reserved. 2 * Copyright (C) 2014-2020, NVIDIA CORPORATION. All rights reserved.
3 * 3 *
4 * Hypervisor interfaces 4 * Hypervisor interfaces
5 * 5 *
@@ -200,8 +200,13 @@ struct hyp_server_page {
200#define _X7_X17 "x7", "x8", "x9", "x10", "x11", "x12", \ 200#define _X7_X17 "x7", "x8", "x9", "x10", "x11", "x12", \
201"x13", "x14", "x15", "x16", "x17" 201"x13", "x14", "x15", "x16", "x17"
202 202
203#if IS_ENABLED(CONFIG_KASAN)
204# define __INLINE __no_sanitize_address __maybe_unused
205#else
206# define __INLINE inline
207#endif
203 208
204static inline int hyp_read_gid(unsigned int *gid) 209static __INLINE int hyp_read_gid(unsigned int *gid)
205{ 210{
206 register uint64_t r0 asm("x0"); 211 register uint64_t r0 asm("x0");
207 register uint64_t r1 asm("x1"); 212 register uint64_t r1 asm("x1");
@@ -215,7 +220,7 @@ static inline int hyp_read_gid(unsigned int *gid)
215 return (int)r0; 220 return (int)r0;
216} 221}
217 222
218static inline uint32_t hyp_read_vcpu_id(void) 223static __INLINE uint32_t hyp_read_vcpu_id(void)
219{ 224{
220 register uint64_t r0 asm("x0"); 225 register uint64_t r0 asm("x0");
221 226
@@ -227,7 +232,7 @@ static inline uint32_t hyp_read_vcpu_id(void)
227 return (uint32_t)r0; 232 return (uint32_t)r0;
228} 233}
229 234
230static inline int hyp_read_nguests(unsigned int *nguests) 235static __INLINE int hyp_read_nguests(unsigned int *nguests)
231{ 236{
232 register uint64_t r0 asm("x0"); 237 register uint64_t r0 asm("x0");
233 register uint64_t r1 asm("x1"); 238 register uint64_t r1 asm("x1");
@@ -241,7 +246,7 @@ static inline int hyp_read_nguests(unsigned int *nguests)
241 return (int)r0; 246 return (int)r0;
242} 247}
243 248
244static inline int hyp_read_ivc_info(uint64_t *ivc_info_page_pa) 249static __INLINE int hyp_read_ivc_info(uint64_t *ivc_info_page_pa)
245{ 250{
246 register uint64_t r0 asm("x0"); 251 register uint64_t r0 asm("x0");
247 register uint64_t r1 asm("x1"); 252 register uint64_t r1 asm("x1");
@@ -255,7 +260,7 @@ static inline int hyp_read_ivc_info(uint64_t *ivc_info_page_pa)
255 return (int)r0; 260 return (int)r0;
256} 261}
257 262
258static inline int hyp_read_ipa_pa_info(struct hyp_ipa_pa_info *info, 263static __INLINE int hyp_read_ipa_pa_info(struct hyp_ipa_pa_info *info,
259 unsigned int guestid, uint64_t ipa) 264 unsigned int guestid, uint64_t ipa)
260{ 265{
261 register uint64_t r0 asm("x0") = guestid; 266 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,
276 return (int)r0; 281 return (int)r0;
277} 282}
278 283
279static inline int hyp_raise_irq(unsigned int irq, unsigned int vmid) 284static __INLINE int hyp_raise_irq(unsigned int irq, unsigned int vmid)
280{ 285{
281 register uint64_t r0 asm("x0") = irq; 286 register uint64_t r0 asm("x0") = irq;
282 register uint64_t r1 asm("x1") = vmid; 287 register uint64_t r1 asm("x1") = vmid;
@@ -289,7 +294,7 @@ static inline int hyp_raise_irq(unsigned int irq, unsigned int vmid)
289 return (int)r0; 294 return (int)r0;
290} 295}
291 296
292static inline int hyp_read_guest_state(unsigned int vmid, unsigned int *state) 297static __INLINE int hyp_read_guest_state(unsigned int vmid, unsigned int *state)
293{ 298{
294 register uint64_t r0 asm("x0") = vmid; 299 register uint64_t r0 asm("x0") = vmid;
295 register uint64_t r1 asm("x1"); 300 register uint64_t r1 asm("x1");
@@ -303,7 +308,7 @@ static inline int hyp_read_guest_state(unsigned int vmid, unsigned int *state)
303 return (int)r0; 308 return (int)r0;
304} 309}
305 310
306static inline int hyp_read_hyp_info(uint64_t *hyp_info_page_pa) 311static __INLINE int hyp_read_hyp_info(uint64_t *hyp_info_page_pa)
307{ 312{
308 register uint64_t r0 asm("x0"); 313 register uint64_t r0 asm("x0");
309 register uint64_t r1 asm("x1"); 314 register uint64_t r1 asm("x1");
@@ -317,7 +322,7 @@ static inline int hyp_read_hyp_info(uint64_t *hyp_info_page_pa)
317 return (int)r0; 322 return (int)r0;
318} 323}
319 324
320static inline int hyp_guest_reset(unsigned int id, 325static __INLINE int hyp_guest_reset(unsigned int id,
321 struct hyp_sys_state_info *out) 326 struct hyp_sys_state_info *out)
322{ 327{
323 register uint64_t r0 asm("x0") = id; 328 register uint64_t r0 asm("x0") = id;
@@ -340,7 +345,7 @@ static inline int hyp_guest_reset(unsigned int id,
340 return (int)r0; 345 return (int)r0;
341} 346}
342 347
343static inline uint64_t hyp_sysinfo_ipa(void) 348static __INLINE uint64_t hyp_sysinfo_ipa(void)
344{ 349{
345 register uint64_t r0 asm("x0"); 350 register uint64_t r0 asm("x0");
346 351
@@ -352,7 +357,7 @@ static inline uint64_t hyp_sysinfo_ipa(void)
352 return r0; 357 return r0;
353} 358}
354 359
355static inline int hyp_trace_get_mask(uint64_t *mask) 360static __INLINE int hyp_trace_get_mask(uint64_t *mask)
356{ 361{
357 register uint64_t x0 asm("x0"); 362 register uint64_t x0 asm("x0");
358 register uint64_t x1 asm("x1"); 363 register uint64_t x1 asm("x1");
@@ -370,7 +375,7 @@ static inline int hyp_trace_get_mask(uint64_t *mask)
370 return (int)x0; 375 return (int)x0;
371} 376}
372 377
373static inline int hyp_trace_set_mask(uint64_t mask) 378static __INLINE int hyp_trace_set_mask(uint64_t mask)
374{ 379{
375 register uint64_t x0 asm("x0") = mask; 380 register uint64_t x0 asm("x0") = mask;
376 381
@@ -385,7 +390,7 @@ static inline int hyp_trace_set_mask(uint64_t mask)
385 return (int)x0; 390 return (int)x0;
386} 391}
387 392
388static inline int hyp_read_uart_relay_info(uint64_t *ipa, uint64_t *size, 393static __INLINE int hyp_read_uart_relay_info(uint64_t *ipa, uint64_t *size,
389 uint64_t *num_channels, 394 uint64_t *num_channels,
390 uint64_t *max_msg_size) 395 uint64_t *max_msg_size)
391{ 396{
@@ -410,8 +415,7 @@ static inline int hyp_read_uart_relay_info(uint64_t *ipa, uint64_t *size,
410 return (int)x0; 415 return (int)x0;
411} 416}
412 417
413 418static __INLINE int hyp_read_nvlog_reader_info(uint64_t *ipa, uint64_t *size,
414static inline int hyp_read_nvlog_reader_info(uint64_t *ipa, uint64_t *size,
415 uint64_t *num_vms) 419 uint64_t *num_vms)
416{ 420{
417 register uint64_t x0 asm("x0"); 421 register uint64_t x0 asm("x0");
@@ -434,7 +438,7 @@ static inline int hyp_read_nvlog_reader_info(uint64_t *ipa, uint64_t *size,
434 return (int)x0; 438 return (int)x0;
435} 439}
436 440
437static inline int hyp_read_nvlog_writer_info(uint64_t *ipa, uint64_t *size) 441static __INLINE int hyp_read_nvlog_writer_info(uint64_t *ipa, uint64_t *size)
438{ 442{
439 register uint64_t x0 asm("x0"); 443 register uint64_t x0 asm("x0");
440 register uint64_t x1 asm("x1"); 444 register uint64_t x1 asm("x1");
@@ -455,7 +459,7 @@ static inline int hyp_read_nvlog_writer_info(uint64_t *ipa, uint64_t *size)
455 return (int)x0; 459 return (int)x0;
456} 460}
457 461
458static inline int hyp_read_err_info_get(uint64_t *ipa, uint64_t *buff_size, 462static __INLINE int hyp_read_err_info_get(uint64_t *ipa, uint64_t *buff_size,
459 unsigned int *async_err_arr_items, int *peer_err_irq_id, 463 unsigned int *async_err_arr_items, int *peer_err_irq_id,
460 unsigned int *vcpu_cnt) 464 unsigned int *vcpu_cnt)
461{ 465{
@@ -480,7 +484,7 @@ static inline int hyp_read_err_info_get(uint64_t *ipa, uint64_t *buff_size,
480 return (int)r0; 484 return (int)r0;
481} 485}
482 486
483static inline int hyp_send_async_err_ack(uint64_t local_rd_idx) 487static __INLINE int hyp_send_async_err_ack(uint64_t local_rd_idx)
484{ 488{
485 register uint64_t r0 asm("x0") = local_rd_idx; 489 register uint64_t r0 asm("x0") = local_rd_idx;
486 490
@@ -492,7 +496,7 @@ static inline int hyp_send_async_err_ack(uint64_t local_rd_idx)
492 return (int)r0; 496 return (int)r0;
493} 497}
494 498
495static inline int hyp_send_sync_err_ack(void) 499static __INLINE int hyp_send_sync_err_ack(void)
496{ 500{
497 register uint64_t r0 asm("x0"); 501 register uint64_t r0 asm("x0");
498 502