staging: unisys: check the whole channel instead of just guid for match
Validate that the channel contents match the channel type that we are matching. Signed-off-by: Sameer Wadgaonkar <sameer.wadgaonkar@unisys.com> Signed-off-by: David Kershner <david.kershner@unisys.com> Reviewed-by: Tim Sell <timothy.sell@unisys.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
66040f9104
commit
cb3b5dccca
@ -143,14 +143,23 @@ static int visorbus_match(struct device *xdev, struct device_driver *xdrv)
|
|||||||
int i;
|
int i;
|
||||||
struct visor_device *dev;
|
struct visor_device *dev;
|
||||||
struct visor_driver *drv;
|
struct visor_driver *drv;
|
||||||
|
struct visorchannel *chan;
|
||||||
|
|
||||||
dev = to_visor_device(xdev);
|
dev = to_visor_device(xdev);
|
||||||
channel_type = visorchannel_get_guid(dev->visorchannel);
|
channel_type = visorchannel_get_guid(dev->visorchannel);
|
||||||
drv = to_visor_driver(xdrv);
|
drv = to_visor_driver(xdrv);
|
||||||
|
chan = dev->visorchannel;
|
||||||
if (!drv->channel_types)
|
if (!drv->channel_types)
|
||||||
return 0;
|
return 0;
|
||||||
for (i = 0; !guid_is_null(&drv->channel_types[i].guid); i++)
|
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 i + 1;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -40,7 +40,8 @@ static struct visor_channeltype_descriptor visorhba_channel_types[] = {
|
|||||||
/* Note that the only channel type we expect to be reported by the
|
/* Note that the only channel type we expect to be reported by the
|
||||||
* bus driver is the VISOR_VHBA channel.
|
* 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 },
|
||||||
{}
|
{}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -712,8 +712,9 @@ out:
|
|||||||
|
|
||||||
/* GUIDS for all channel types supported by this driver. */
|
/* GUIDS for all channel types supported by this driver. */
|
||||||
static struct visor_channeltype_descriptor visorinput_channel_types[] = {
|
static struct visor_channeltype_descriptor visorinput_channel_types[] = {
|
||||||
{ VISOR_KEYBOARD_CHANNEL_GUID, "keyboard"},
|
{ VISOR_KEYBOARD_CHANNEL_GUID, "keyboard",
|
||||||
{ VISOR_MOUSE_CHANNEL_GUID, "mouse"},
|
sizeof(struct channel_header), 0 },
|
||||||
|
{ VISOR_MOUSE_CHANNEL_GUID, "mouse", sizeof(struct channel_header), 0 },
|
||||||
{}
|
{}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -49,7 +49,8 @@ static struct visor_channeltype_descriptor visornic_channel_types[] = {
|
|||||||
/* Note that the only channel type we expect to be reported by the
|
/* Note that the only channel type we expect to be reported by the
|
||||||
* bus driver is the VISOR_VNIC channel.
|
* 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);
|
MODULE_DEVICE_TABLE(visorbus, visornic_channel_types);
|
||||||
|
Loading…
Reference in New Issue
Block a user