diff options
author | Kenny Levinsen <kl@kl.wtf> | 2023-06-05 11:51:06 +0200 |
---|---|---|
committer | Kenny Levinsen <kl@kl.wtf> | 2023-06-05 11:55:59 +0200 |
commit | 15f2f6642fb5020c1b69e5424a8463569ea6a3e9 (patch) | |
tree | 86ed510324512517c6c85d5da351a9b29fdf13b4 | |
parent | b61d5922f1d0910a848deb100570ad8587aea38d (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.c | 3 |
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); |