summaryrefslogtreecommitdiffstats
path: root/drivers/gpu
diff options
context:
space:
mode:
authorDavid Li <davli@nvidia.com>2017-09-12 21:37:00 -0400
committermobile promotions <svcmobile_promotions@nvidia.com>2017-09-18 22:35:19 -0400
commit838ba0a14d61ffde0d8631d1c6267694632234de (patch)
tree2cee31ff22f0cdb186182974273da3406b3326d2 /drivers/gpu
parente229cb76ba348f8ab445a029adfc55a9b05d1161 (diff)
gpu: nvgpu: check capability for reschedule runlist submit flag
NVGPU_SUBMIT_GPFIFO_FLAGS_RESCHEDULE_RUNLIST is only used by realtime priority EGL context, which checks for CAP_SYS_NICE during context creation in userspace, so it wasn't secure against unprivileged program spoofing submit ioctl with this flag to stall GPU progress of others. This flag does increase duration of submit by approx 16us, mostly due to register accesses and PMU FIFO mutex. Bug 1989493 Bug 1854791 Bug 1968813 Change-Id: I086b1d14f286abf8bd2d2dfae5945974b7fe6d1f Reviewed-on: https://git-master.nvidia.com/r/#/c/1558644 Signed-off-by: David Li <davli@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/1558644 Reviewed-by: svc-mobile-coverity <svc-mobile-coverity@nvidia.com> GVS: Gerrit_Virtual_Submit Reviewed-by: svccoveritychecker <svccoveritychecker@nvidia.com> Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com>
Diffstat (limited to 'drivers/gpu')
-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 5e09c677..6c66eca0 100644
--- a/drivers/gpu/nvgpu/common/linux/ioctl_channel.c
+++ b/drivers/gpu/nvgpu/common/linux/ioctl_channel.c
@@ -823,6 +823,11 @@ static int gk20a_ioctl_channel_submit_gpfifo(
823#endif 823#endif
824 if (ch->has_timedout) 824 if (ch->has_timedout)
825 return -ETIMEDOUT; 825 return -ETIMEDOUT;
826
827 if ((NVGPU_SUBMIT_GPFIFO_FLAGS_RESCHEDULE_RUNLIST & args->flags) &&
828 !capable(CAP_SYS_NICE))
829 return -EPERM;
830
826 ret = gk20a_submit_channel_gpfifo(ch, NULL, args, args->num_entries, 831 ret = gk20a_submit_channel_gpfifo(ch, NULL, args, args->num_entries,
827 args->flags, &args->fence, 832 args->flags, &args->fence,
828 &fence_out, false, profile); 833 &fence_out, false, profile);