diff options
| author | dmitry pervushin <dpervushin@nvidia.com> | 2020-01-13 13:39:52 -0500 |
|---|---|---|
| committer | mobile promotions <svcmobile_promotions@nvidia.com> | 2020-03-24 11:39:04 -0400 |
| commit | 982049b5ceaeab23cfda7b5950bd0c85322a7b20 (patch) | |
| tree | 62452b294f0c6b856bdbc5bcd37fa7afd11d2e03 /include | |
| parent | 74f006cebaf29dded0e95ec4852ecb7b8eda537a (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.h | 44 |
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 | ||
| 204 | static inline int hyp_read_gid(unsigned int *gid) | 209 | static __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 | ||
| 218 | static inline uint32_t hyp_read_vcpu_id(void) | 223 | static __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 | ||
| 230 | static inline int hyp_read_nguests(unsigned int *nguests) | 235 | static __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 | ||
| 244 | static inline int hyp_read_ivc_info(uint64_t *ivc_info_page_pa) | 249 | static __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 | ||
| 258 | static inline int hyp_read_ipa_pa_info(struct hyp_ipa_pa_info *info, | 263 | static __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 | ||
| 279 | static inline int hyp_raise_irq(unsigned int irq, unsigned int vmid) | 284 | static __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 | ||
| 292 | static inline int hyp_read_guest_state(unsigned int vmid, unsigned int *state) | 297 | static __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 | ||
| 306 | static inline int hyp_read_hyp_info(uint64_t *hyp_info_page_pa) | 311 | static __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 | ||
| 320 | static inline int hyp_guest_reset(unsigned int id, | 325 | static __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 | ||
| 343 | static inline uint64_t hyp_sysinfo_ipa(void) | 348 | static __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 | ||
| 355 | static inline int hyp_trace_get_mask(uint64_t *mask) | 360 | static __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 | ||
| 373 | static inline int hyp_trace_set_mask(uint64_t mask) | 378 | static __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 | ||
| 388 | static inline int hyp_read_uart_relay_info(uint64_t *ipa, uint64_t *size, | 393 | static __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 | 418 | static __INLINE int hyp_read_nvlog_reader_info(uint64_t *ipa, uint64_t *size, | |
| 414 | static 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 | ||
| 437 | static inline int hyp_read_nvlog_writer_info(uint64_t *ipa, uint64_t *size) | 441 | static __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 | ||
| 458 | static inline int hyp_read_err_info_get(uint64_t *ipa, uint64_t *buff_size, | 462 | static __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 | ||
| 483 | static inline int hyp_send_async_err_ack(uint64_t local_rd_idx) | 487 | static __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 | ||
| 495 | static inline int hyp_send_sync_err_ack(void) | 499 | static __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 | ||
