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 @@
 	/* 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 @@
 		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);