KDrive: Fix error handlig in tslib driver
If ts_open() fails and return NULL, then next call to ts_fd() segfaults because of NULL dereference. There is no need to check output of ts_fd() as ts_open() did this internally. Signed-off-by: Paulius Zaleckas <paulius.zaleckas@gmail.com> Reviewed-by: Daniel Stone <daniel@fooishbar.org> Reviewed-by: Keith Packard <keithp@keithp.com> Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
This commit is contained in:
		
							parent
							
								
									1a0d9324b3
								
							
						
					
					
						commit
						8990b31214
					
				| 
						 | 
					@ -117,15 +117,22 @@ TslibEnable (KdPointerInfo *pi)
 | 
				
			||||||
        pi->path = strdup("/dev/input/touchscreen0");
 | 
					        pi->path = strdup("/dev/input/touchscreen0");
 | 
				
			||||||
        ErrorF("[tslib/TslibEnable] no device path given, trying %s\n", pi->path);
 | 
					        ErrorF("[tslib/TslibEnable] no device path given, trying %s\n", pi->path);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private->tsDev = ts_open(pi->path, 0);
 | 
					    private->tsDev = ts_open(pi->path, 0);
 | 
				
			||||||
    private->fd = ts_fd(private->tsDev);
 | 
					    if (!private->tsDev) {
 | 
				
			||||||
    if (!private->tsDev || ts_config(private->tsDev) || private->fd < 0) {
 | 
					 | 
				
			||||||
        ErrorF("[tslib/TslibEnable] failed to open %s\n", pi->path);
 | 
					        ErrorF("[tslib/TslibEnable] failed to open %s\n", pi->path);
 | 
				
			||||||
        if (private->fd >= 0)
 | 
					 | 
				
			||||||
            close(private->fd);
 | 
					 | 
				
			||||||
        return BadAlloc;
 | 
					        return BadAlloc;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (ts_config(private->tsDev)) {
 | 
				
			||||||
 | 
					        ErrorF("[tslib/TslibEnable] failed to load configuration\n");
 | 
				
			||||||
 | 
					        ts_close(private->tsDev);
 | 
				
			||||||
 | 
					        private->tsDev = NULL;
 | 
				
			||||||
 | 
					        return BadValue;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private->fd = ts_fd(private->tsDev);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    KdRegisterFd(private->fd, TsRead, pi);
 | 
					    KdRegisterFd(private->fd, TsRead, pi);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return Success;
 | 
					    return Success;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue