aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKenny Levinsen <kl@kl.wtf>2023-06-05 11:51:06 +0200
committerKenny Levinsen <kl@kl.wtf>2023-06-05 11:55:59 +0200
commit15f2f6642fb5020c1b69e5424a8463569ea6a3e9 (patch)
tree86ed510324512517c6c85d5da351a9b29fdf13b4
parentb61d5922f1d0910a848deb100570ad8587aea38d (diff)
gamma-control: Read ramps using pread
read advances the file description offset, and requires the client to ensure that it is reset appropriately before the next gamma ramp submission. As there is no event to indicate that wlroots finished processing the new gamma ramp, this can result in a race between the client seeking in the file and wlroots reading its content. Use pread with a fixed offset instead. Fixes: https://gitlab.freedesktop.org/wlroots/wlroots/-/issues/3655
-rw-r--r--types/wlr_gamma_control_v1.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/types/wlr_gamma_control_v1.c b/types/wlr_gamma_control_v1.c
index b38408d3..1b771494 100644
--- a/types/wlr_gamma_control_v1.c
+++ b/types/wlr_gamma_control_v1.c
@@ -1,3 +1,4 @@
+#define _POSIX_C_SOURCE 200809L
#include <assert.h>
#include <fcntl.h>
#include <stdlib.h>
@@ -119,7 +120,7 @@ static void gamma_control_handle_set_gamma(struct wl_client *client,
goto error_fd;
}
- ssize_t n_read = read(fd, table, table_size);
+ ssize_t n_read = pread(fd, table, table_size, 0);
if (n_read < 0) {
wlr_log_errno(WLR_ERROR, "failed to read gamma table");
gamma_control_send_failed(gamma_control);