From: Kristian Høgsberg Date: Thu, 19 Sep 2013 05:14:09 +0000 (-0700) Subject: weston-launch: Use fstat to make sure we stat the right fd X-Git-Tag: upstream/0.1.8~936 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=6a7c8492cc5160ab392a82ba6c106b1fada9136d;p=profile%2Fivi%2Fweston-ivi-shell.git weston-launch: Use fstat to make sure we stat the right fd Instead of the racy stat+open, open first and then use fstat. We want to make sure we're stating the fd we'll be sending to weston and nothing else. --- diff --git a/src/weston-launch.c b/src/weston-launch.c index 059010c..05f15c1 100644 --- a/src/weston-launch.c +++ b/src/weston-launch.c @@ -280,9 +280,6 @@ handle_open(struct weston_launch *wl, struct msghdr *msg, ssize_t len) /* Ensure path is null-terminated */ ((char *) message)[len-1] = '\0'; - if (stat(message->path, &s) < 0) - goto err0; - fd = open(message->path, message->flags); if (fd < 0) { fprintf(stderr, "Error opening device %s: %m\n", @@ -290,6 +287,13 @@ handle_open(struct weston_launch *wl, struct msghdr *msg, ssize_t len) goto err0; } + if (fstat(fd, &s) < 0) { + close(fd); + fd = -1; + fprintf(stderr, "Failed to stat %s\n", message->path); + goto err0; + } + if (major(s.st_rdev) != INPUT_MAJOR && major(s.st_rdev) != DRM_MAJOR) { close(fd);