camera: tegra: Fix security vulnerability issue
Frank Chen [Mon, 21 Mar 2016 17:40:45 +0000 (10:40 -0700)]
We need to validate power on/off function size passed
in from user mode in order to avoid integer overflow
or out of memory failures.

Bug 1745100

Change-Id: Idddd848f7dc1e864559ad219f9204325128484e5
Signed-off-by: Frank Chen <frankc@nvidia.com>
Signed-off-by: Bibek Basu <bbasu@nvidia.com>
Reviewed-on: http://git-master/r/1114354
(cherry picked from commit 8b3afcc132882f3102083f9a24de7f55476ca59b)
Reviewed-on: http://git-master/r/1150944
Reviewed-by: Automatic_Commit_Validation_User
GVS: Gerrit_Virtual_Submit
Reviewed-by: Matthew Pedro <mapedro@nvidia.com>

drivers/media/platform/tegra/cam_dev/virtual.c
include/media/camera.h

index e151068..5484d32 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * virtual.c - Virtual kernel driver
  *
- * Copyright (c) 2013-2014, NVIDIA CORPORATION.  All rights reserved.
+ * Copyright (c) 2013-2016, NVIDIA CORPORATION. All rights reserved.
 
  * This program is free software; you can redistribute it and/or modify it
  * under the terms and conditions of the GNU General Public License,
@@ -354,6 +354,18 @@ static int virtual_device_sanity_check(
        }
        dev_dbg(dev, "regulator name size: %d\n", *len);
 
+       if (dev_info->pwr_on_size > VIRTUAL_DEV_MAX_POWER_SIZE) {
+               dev_err(dev, "%s power on function size too big %d!\n",
+               __func__, dev_info->pwr_on_size);
+               return -ENODEV;
+       }
+
+       if (dev_info->pwr_off_size > VIRTUAL_DEV_MAX_POWER_SIZE) {
+               dev_err(dev, "%s power off function size too big %d!\n",
+               __func__, dev_info->pwr_off_size);
+               return -ENODEV;
+       }
+
        return 0;
 }
 
index 5683784..5cbac56 100644 (file)
@@ -1,6 +1,5 @@
 /*
- * Copyright (c) 2013-2014, NVIDIA CORPORATION.  All rights reserved.
-
+ * Copyright (c) 2013-2016, NVIDIA CORPORATION.  All rights reserved.
  * This program is free software; you can redistribute it and/or modify it
  * under the terms and conditions of the GNU General Public License,
  * version 2, as published by the Free Software Foundation.
@@ -164,6 +163,7 @@ struct edp_cfg {
 
 #define VIRTUAL_DEV_MAX_REGULATORS     8
 #define VIRTUAL_DEV_MAX_GPIOS          8
+#define VIRTUAL_DEV_MAX_POWER_SIZE     32
 #define VIRTUAL_REGNAME_SIZE           (VIRTUAL_DEV_MAX_REGULATORS * \
                                                CAMERA_MAX_NAME_LENGTH)
 #ifdef CONFIG_COMPAT