summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/common/linux/ioctl_channel.c
diff options
context:
space:
mode:
authorAlex Waterman <alexw@nvidia.com>2017-12-29 17:54:14 -0500
committermobile promotions <svcmobile_promotions@nvidia.com>2018-01-25 17:25:21 -0500
commit25aba34bbddc0080c8e12846596d07d09f186159 (patch)
tree5a27232f0c1105c02adb0bca7667a9550b9bb8df /drivers/gpu/nvgpu/common/linux/ioctl_channel.c
parent43dbbaaad7b49036a507b7e04af67b766adc41be (diff)
gpu: nvgpu: add speculative load barrier (channel IOCTLs)
Data can be speculatively loaded from memory and stay in cache even when bound check fails. This can lead to unintended information disclosure via side-channel analysis. To mitigate this problem insert a speculation barrier. bug 2039126 CVE-2017-5753 Change-Id: I6b8af794ea2156f0342ea6cc925051f49dbb1d6e Signed-off-by: Alex Waterman <alexw@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/1640498 Reviewed-by: svc-mobile-coverity <svc-mobile-coverity@nvidia.com> Reviewed-by: Richard Zhao <rizhao@nvidia.com> GVS: Gerrit_Virtual_Submit Reviewed-by: Konsta Holtta <kholtta@nvidia.com> Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com> Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com> Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/common/linux/ioctl_channel.c')
-rw-r--r--drivers/gpu/nvgpu/common/linux/ioctl_channel.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/drivers/gpu/nvgpu/common/linux/ioctl_channel.c b/drivers/gpu/nvgpu/common/linux/ioctl_channel.c
index e8f4c14b..b7856ca0 100644
--- a/drivers/gpu/nvgpu/common/linux/ioctl_channel.c
+++ b/drivers/gpu/nvgpu/common/linux/ioctl_channel.c
@@ -31,6 +31,7 @@
31#include <nvgpu/debug.h> 31#include <nvgpu/debug.h>
32#include <nvgpu/enabled.h> 32#include <nvgpu/enabled.h>
33#include <nvgpu/error_notifier.h> 33#include <nvgpu/error_notifier.h>
34#include <nvgpu/barrier.h>
34 35
35#include "gk20a/gk20a.h" 36#include "gk20a/gk20a.h"
36#include "gk20a/dbg_gpu_gk20a.h" 37#include "gk20a/dbg_gpu_gk20a.h"
@@ -368,6 +369,8 @@ static int gk20a_init_error_notifier(struct channel_gk20a *ch,
368 return -EINVAL; 369 return -EINVAL;
369 } 370 }
370 371
372 nvgpu_speculation_barrier();
373
371 /* map handle */ 374 /* map handle */
372 va = dma_buf_vmap(dmabuf); 375 va = dma_buf_vmap(dmabuf);
373 if (!va) { 376 if (!va) {
@@ -661,6 +664,8 @@ static int gk20a_channel_wait(struct channel_gk20a *ch,
661 return -EINVAL; 664 return -EINVAL;
662 } 665 }
663 666
667 nvgpu_speculation_barrier();
668
664 notif = dma_buf_vmap(dmabuf); 669 notif = dma_buf_vmap(dmabuf);
665 if (!notif) { 670 if (!notif) {
666 nvgpu_err(g, "failed to map notifier memory"); 671 nvgpu_err(g, "failed to map notifier memory");