From 8990b31214bcbc08090604147287455bfde91c11 Mon Sep 17 00:00:00 2001 From: Paulius Zaleckas Date: Mon, 18 Oct 2010 00:02:01 +0300 Subject: [PATCH] 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 Reviewed-by: Daniel Stone Reviewed-by: Keith Packard Signed-off-by: Peter Hutterer --- hw/kdrive/linux/tslib.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/hw/kdrive/linux/tslib.c b/hw/kdrive/linux/tslib.c index 48a084220..570cbf99a 100644 --- a/hw/kdrive/linux/tslib.c +++ b/hw/kdrive/linux/tslib.c @@ -117,15 +117,22 @@ TslibEnable (KdPointerInfo *pi) pi->path = strdup("/dev/input/touchscreen0"); ErrorF("[tslib/TslibEnable] no device path given, trying %s\n", pi->path); } + private->tsDev = ts_open(pi->path, 0); - private->fd = ts_fd(private->tsDev); - if (!private->tsDev || ts_config(private->tsDev) || private->fd < 0) { + if (!private->tsDev) { ErrorF("[tslib/TslibEnable] failed to open %s\n", pi->path); - if (private->fd >= 0) - close(private->fd); 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); return Success;