[PATCH libinput] evdev: fail before open_restricted if the devnode doesn't exist

Peter Hutterer peter.hutterer at who-t.net
Tue Feb 13 04:32:26 UTC 2018


On Tue, Feb 13, 2018 at 01:43:27PM +1000, Peter Hutterer wrote:
> Checking these bugs before I was about to push:
> 
> On Fri, Feb 09, 2018 at 07:59:08PM +1000, Peter Hutterer wrote:
> > https://bugzilla.redhat.com/show_bug.cgi?id=1536633
> > https://bugzilla.redhat.com/show_bug.cgi?id=1539046
> > https://bugzilla.redhat.com/show_bug.cgi?id=1539783
> > https://bugzilla.redhat.com/show_bug.cgi?id=1540662
> > https://bugs.freedesktop.org/show_bug.cgi?id=104278
>  
> afaict, these should all fixed by cbb4ec1e3e76b64ec53c25036976e0374aaf41de.
> Did you actually have a case of a null path? 

sigh, sorry about the noise. this is a different rotation than the cbb4e
patch fixed. I checked the backtraces with addr2line and yes, the functions
in the backtrace just seem bogus, your patch does address the issue.

pushed as:
   1b21a431..cb186abc  master -> master

Thanks heaps for debugging that one!

Cheers,
   Peter

> > Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
> > ---
> > Can you give this one a try please? Quick fix but it passes the test suite.
> > 
> >  src/evdev.c | 8 ++++++++
> >  1 file changed, 8 insertions(+)
> > 
> > diff --git a/src/evdev.c b/src/evdev.c
> > index d1ca243d..d412eeb0 100644
> > --- a/src/evdev.c
> > +++ b/src/evdev.c
> > @@ -1917,6 +1917,11 @@ evdev_device_create(struct libinput_seat *seat,
> >  	const char *devnode = udev_device_get_devnode(udev_device);
> >  	const char *sysname = udev_device_get_sysname(udev_device);
> >  
> > +	if (!devnode) {
> > +		log_info(libinput, "%s: no device node associated\n", sysname);
> > +		return NULL;
> > +	}
> > +
> >  	if (udev_device_should_be_ignored(udev_device)) {
> >  		log_debug(libinput, "%s: device is ignored\n", sysname);
> >  		return NULL;
> > @@ -2434,6 +2439,9 @@ evdev_device_resume(struct evdev_device *device)
> >  		return -ENODEV;
> >  
> >  	devnode = udev_device_get_devnode(device->udev_device);
> > +	if (devnode == NULL)
> > +		return -ENODEV;
> > +
> >  	fd = open_restricted(libinput, devnode,
> >  			     O_RDWR | O_NONBLOCK | O_CLOEXEC);
> >  
> > -- 
> > 2.14.3
> > 


More information about the wayland-devel mailing list