From: Sameer Wadgaonkar <sameer.wadgaon...@unisys.com>

Validate that the channel contents match the channel type that we are
matching.

Signed-off-by: Sameer Wadgaonkar <sameer.wadgaon...@unisys.com>
Signed-off-by: David Kershner <david.kersh...@unisys.com>
Reviewed-by: Tim Sell <timothy.s...@unisys.com>
---
 drivers/staging/unisys/visorbus/visorbus_main.c | 11 ++++++++++-
 drivers/staging/unisys/visorhba/visorhba_main.c |  3 ++-
 drivers/staging/unisys/visorinput/visorinput.c  |  5 +++--
 drivers/staging/unisys/visornic/visornic_main.c |  3 ++-
 4 files changed, 17 insertions(+), 5 deletions(-)

diff --git a/drivers/staging/unisys/visorbus/visorbus_main.c 
b/drivers/staging/unisys/visorbus/visorbus_main.c
index 7df06f1..cc6a9d8 100644
--- a/drivers/staging/unisys/visorbus/visorbus_main.c
+++ b/drivers/staging/unisys/visorbus/visorbus_main.c
@@ -143,14 +143,23 @@ static int visorbus_match(struct device *xdev, struct 
device_driver *xdrv)
        int i;
        struct visor_device *dev;
        struct visor_driver *drv;
+       struct visorchannel *chan;
 
        dev = to_visor_device(xdev);
        channel_type = visorchannel_get_guid(dev->visorchannel);
        drv = to_visor_driver(xdrv);
+       chan = dev->visorchannel;
        if (!drv->channel_types)
                return 0;
        for (i = 0; !guid_is_null(&drv->channel_types[i].guid); i++)
-               if (guid_equal(&drv->channel_types[i].guid, channel_type))
+               if (guid_equal(&drv->channel_types[i].guid, channel_type) &&
+                   visor_check_channel(visorchannel_get_header(chan),
+                                       xdev,
+                                       &drv->channel_types[i].guid,
+                                       (char *)drv->channel_types[i].name,
+                                       drv->channel_types[i].min_bytes,
+                                       drv->channel_types[i].version,
+                                       VISOR_CHANNEL_SIGNATURE))
                        return i + 1;
        return 0;
 }
diff --git a/drivers/staging/unisys/visorhba/visorhba_main.c 
b/drivers/staging/unisys/visorhba/visorhba_main.c
index b84b40e..91e6e35 100644
--- a/drivers/staging/unisys/visorhba/visorhba_main.c
+++ b/drivers/staging/unisys/visorhba/visorhba_main.c
@@ -40,7 +40,8 @@
        /* Note that the only channel type we expect to be reported by the
         * bus driver is the VISOR_VHBA channel.
         */
-       { VISOR_VHBA_CHANNEL_GUID, "sparvhba" },
+       { VISOR_VHBA_CHANNEL_GUID, "sparvhba", sizeof(struct channel_header),
+         VISOR_VHBA_CHANNEL_VERSIONID },
        {}
 };
 
diff --git a/drivers/staging/unisys/visorinput/visorinput.c 
b/drivers/staging/unisys/visorinput/visorinput.c
index 1b58663..450f003 100644
--- a/drivers/staging/unisys/visorinput/visorinput.c
+++ b/drivers/staging/unisys/visorinput/visorinput.c
@@ -712,8 +712,9 @@ static int visorinput_resume(struct visor_device *dev,
 
 /* GUIDS for all channel types supported by this driver. */
 static struct visor_channeltype_descriptor visorinput_channel_types[] = {
-       { VISOR_KEYBOARD_CHANNEL_GUID, "keyboard"},
-       { VISOR_MOUSE_CHANNEL_GUID, "mouse"},
+       { VISOR_KEYBOARD_CHANNEL_GUID, "keyboard",
+         sizeof(struct channel_header), 0 },
+       { VISOR_MOUSE_CHANNEL_GUID, "mouse", sizeof(struct channel_header), 0 },
        {}
 };
 
diff --git a/drivers/staging/unisys/visornic/visornic_main.c 
b/drivers/staging/unisys/visornic/visornic_main.c
index c5f0b01..f318888 100644
--- a/drivers/staging/unisys/visornic/visornic_main.c
+++ b/drivers/staging/unisys/visornic/visornic_main.c
@@ -49,7 +49,8 @@
        /* Note that the only channel type we expect to be reported by the
         * bus driver is the VISOR_VNIC channel.
         */
-       { VISOR_VNIC_CHANNEL_GUID, "ultravnic" },
+       { VISOR_VNIC_CHANNEL_GUID, "ultravnic", sizeof(struct channel_header),
+         VISOR_VNIC_CHANNEL_VERSIONID },
        {}
 };
 MODULE_DEVICE_TABLE(visorbus, visornic_channel_types);
-- 
1.9.1

_______________________________________________
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel

Reply via email to