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 <neither@nut.email> > --- > 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 Linuxwacom-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linuxwacom-devel