From 392fb221dc71c05a268ba75c14f6154103066d7c Mon Sep 17 00:00:00 2001 From: Marc Di Luzio Date: Sat, 9 Feb 2019 19:45:44 +0000 Subject: [PATCH] Return failure on failure, and don't try and read past the end of argv --- daemon/gpuclockctl.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/daemon/gpuclockctl.c b/daemon/gpuclockctl.c index 3e7dc3c..78501b5 100644 --- a/daemon/gpuclockctl.c +++ b/daemon/gpuclockctl.c @@ -283,17 +283,19 @@ int main(int argc, char *argv[]) info.vendor = get_vendor(argv[1]); info.device = get_device(argv[2]); - if (info.vendor == Vendor_NVIDIA) + if (info.vendor == Vendor_NVIDIA && argc > 4) info.nv_perf_level = get_generic_value(argv[4]); /* Fetch the state and print it out */ switch (info.vendor) { case Vendor_NVIDIA: /* Get nvidia power level */ - get_gpu_state_nv(&info); + if( get_gpu_state_nv(&info) != 0 ) + exit(EXIT_FAILURE); break; case Vendor_AMD: - get_gpu_state_amd(&info); + if( get_gpu_state_amd(&info) != 0) + exit(EXIT_FAILURE); break; default: printf("Currently unsupported GPU vendor 0x%04x, doing nothing!\n", (short)info.vendor); @@ -316,7 +318,7 @@ int main(int argc, char *argv[]) info.core = get_generic_value(argv[4]); info.mem = get_generic_value(argv[5]); - if (info.vendor == Vendor_NVIDIA) + if (info.vendor == Vendor_NVIDIA && argc > 6) info.nv_perf_level = get_generic_value(argv[6]); printf("gpuclockctl setting core:%ld mem:%ld on device:%ld with vendor 0x%04x\n",