]> rtime.felk.cvut.cz Git - hercules2020/nv-tegra/linux-4.4.git/commitdiff
v4l2-subdev: check for subdev_on_csi
authorAhung Cheng <ahcheng@nvidia.com>
Fri, 2 Dec 2016 04:12:57 +0000 (12:12 +0800)
committermobile promotions <svcmobile_promotions@nvidia.com>
Fri, 13 Jan 2017 06:22:35 +0000 (22:22 -0800)
Add check for subdev_on_csi to avoid
accessing null pointer

bug 1847574

Change-Id: I91f6a7d5f9eb5fac4c3db7b1615c2c82a40e23c4
Signed-off-by: Ahung Cheng <ahcheng@nvidia.com>
Reviewed-on: http://git-master/r/1268139
Reviewed-by: svccoveritychecker <svccoveritychecker@nvidia.com>
Reviewed-by: Automatic_Commit_Validation_User
GVS: Gerrit_Virtual_Submit
Reviewed-by: Jihoon Bang <jbang@nvidia.com>
drivers/media/platform/tegra/camera/vi/channel.c

index cd931bd3ebc8530c2ddbf497c557b6bd96766053..fda899d643edfb70e85dece0a2f54d34edbbf216 100644 (file)
@@ -1166,21 +1166,21 @@ tegra_channel_enum_input(struct file *file, void *fh, struct v4l2_input *inp)
        ret = v4l2_device_call_until_err(chan->video.v4l2_dev,
                        chan->grp_id, video, g_input_status, &inp->status);
 
-       if (ret != -ENODEV) {
-               inp->type = V4L2_INPUT_TYPE_CAMERA;
-               if (v4l2_subdev_has_op(sd_on_csi, video, s_dv_timings)) {
-                       inp->capabilities = V4L2_IN_CAP_DV_TIMINGS;
-                       snprintf(inp->name,
-                               sizeof(inp->name), "HDMI %u",
-                               chan->port[0]);
-               } else
-                       snprintf(inp->name,
-                               sizeof(inp->name), "Camera %u",
-                               chan->port[0]);
-               return ret;
-       }
+       if (ret == -ENODEV || sd_on_csi == NULL)
+               return -ENODEV;
+
+       inp->type = V4L2_INPUT_TYPE_CAMERA;
+       if (v4l2_subdev_has_op(sd_on_csi, video, s_dv_timings)) {
+               inp->capabilities = V4L2_IN_CAP_DV_TIMINGS;
+               snprintf(inp->name,
+                       sizeof(inp->name), "HDMI %u",
+                       chan->port[0]);
+       } else
+               snprintf(inp->name,
+                       sizeof(inp->name), "Camera %u",
+                       chan->port[0]);
 
-       return -ENOTTY;
+       return ret;
 }
 
 static int tegra_channel_g_input(struct file *file, void *priv, unsigned int *i)