]> rtime.felk.cvut.cz Git - sojka/nv-tegra/linux-3.10.git/commitdiff
video: tegra: host: Fix invalid syncpt entry
authorArto Merilainen <amerilainen@nvidia.com>
Fri, 23 May 2014 11:49:43 +0000 (14:49 +0300)
committerMandar Padmawar <mpadmawar@nvidia.com>
Tue, 27 May 2014 10:40:50 +0000 (03:40 -0700)
While accessing invalid syncpoint entry through sysfs we tried to
access resources that do not exist. This patch adds necessary
checks to the sysfs entry accesses.

Bug 200006679

Change-Id: Icbf60b6cd47be5528f8289f9f953a222d23685cc
Signed-off-by: Arto Merilainen <amerilainen@nvidia.com>
Reviewed-on: http://git-master/r/414129
Reviewed-by: Automatic_Commit_Validation_User
Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com>
drivers/video/tegra/host/nvhost_syncpt.c

index 8e868008f45907c223d881931eb661d452baaa76..a2cc5bebc21678432aa27b0c2bed3da8ba45d8bb 100644 (file)
@@ -606,6 +606,9 @@ static ssize_t syncpt_type_show(struct kobject *kobj,
        struct nvhost_syncpt_attr *syncpt_attr =
                container_of(attr, struct nvhost_syncpt_attr, attr);
 
+       if (syncpt_attr->id < 0)
+               return snprintf(buf, PAGE_SIZE, "non_client_managed\n");
+
        if (nvhost_syncpt_client_managed(&syncpt_attr->host->syncpt,
                        syncpt_attr->id))
                return snprintf(buf, PAGE_SIZE, "%s\n", "client_managed");
@@ -619,6 +622,9 @@ static ssize_t syncpt_is_assigned(struct kobject *kobj,
        struct nvhost_syncpt_attr *syncpt_attr =
                container_of(attr, struct nvhost_syncpt_attr, attr);
 
+       if (syncpt_attr->id < 0)
+               return snprintf(buf, PAGE_SIZE, "not_assigned\n");
+
        if (nvhost_is_syncpt_assigned(&syncpt_attr->host->syncpt,
                        syncpt_attr->id))
                return snprintf(buf, PAGE_SIZE, "%s\n", "assigned");
@@ -633,6 +639,9 @@ static ssize_t syncpt_name_show(struct kobject *kobj,
        struct nvhost_syncpt_attr *syncpt_attr =
                container_of(attr, struct nvhost_syncpt_attr, attr);
 
+       if (syncpt_attr->id < 0)
+               return snprintf(buf, PAGE_SIZE, "\n");
+
        return snprintf(buf, PAGE_SIZE, "%s\n",
                nvhost_syncpt_get_name(syncpt_attr->host->dev,
                                       syncpt_attr->id));
@@ -644,6 +653,9 @@ static ssize_t syncpt_min_show(struct kobject *kobj,
        struct nvhost_syncpt_attr *syncpt_attr =
                container_of(attr, struct nvhost_syncpt_attr, attr);
 
+       if (syncpt_attr->id < 0)
+               return snprintf(buf, PAGE_SIZE, "0\n");
+
        return snprintf(buf, PAGE_SIZE, "%u\n",
                        nvhost_syncpt_read(&syncpt_attr->host->syncpt,
                                syncpt_attr->id));
@@ -655,6 +667,9 @@ static ssize_t syncpt_max_show(struct kobject *kobj,
        struct nvhost_syncpt_attr *syncpt_attr =
                container_of(attr, struct nvhost_syncpt_attr, attr);
 
+       if (syncpt_attr->id < 0)
+               return snprintf(buf, PAGE_SIZE, "0\n");
+
        return snprintf(buf, PAGE_SIZE, "%u\n",
                        nvhost_syncpt_read_max(&syncpt_attr->host->syncpt,
                                syncpt_attr->id));