On Sun, Jan 03, 2016 at 10:21:54PM +0100, Julian Ganz wrote:
> Connecting devices which are unknown to the user-level driver led to
> crashes or hangs of the X-Server due to usage of uninitialized struct
> members. This problem is avoided by making the initialization function
> responsible for populating these fields return an error if no matching
> entry could be found in the WacomModelDesc table rather than carrying on
> with invalid data.
>
> Signed-off-by: Julian Ganz <[email protected]>
> ---
> src/wcmUSB.c | 5 +++++
> 1 file changed, 5 insertions(+)
>
> diff --git a/src/wcmUSB.c b/src/wcmUSB.c
> index dcb1690..e7bbceb 100644
> --- a/src/wcmUSB.c
> +++ b/src/wcmUSB.c
> @@ -394,6 +394,7 @@ void usbListModels(void)
> static Bool usbWcmInit(InputInfoPtr pInfo, char* id, size_t id_len, float
> *version)
> {
> int i;
> + Bool found = FALSE;
> struct input_id sID;
> WacomDevicePtr priv = (WacomDevicePtr)pInfo->private;
> WacomCommonPtr common = priv->common;
> @@ -425,12 +426,16 @@ static Bool usbWcmInit(InputInfoPtr pInfo, char* id,
> size_t id_len, float *versi
> if (sID.vendor == WacomModelDesc[i].vendor_id &&
> sID.product == WacomModelDesc [i].model_id)
> {
> + found = TRUE;
> common->wcmModel = WacomModelDesc [i].model;
> common->wcmResolX = WacomModelDesc [i].xRes;
> common->wcmResolY = WacomModelDesc [i].yRes;
> }
> }
>
> + if (!found)
> + return !Success;
> +
> if (!common->wcmModel)
> {
> common->wcmModel = &usbUnknown;
^^ isn't this statement supposed to catch the models that
don't have explicit support and deal with them? I think bailing out on
unknown models is fixing the wrong problem. what struct members are
uninitialized?
Cheers,
Peter
------------------------------------------------------------------------------
_______________________________________________
Linuxwacom-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/linuxwacom-devel