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.
parent 81b49639
......@@ -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);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment