mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-26 10:40:11 +01:00
radv: add a secure_compile_open_fifo_fds() helper
This will be used to create a communication pipe between the user
facing device and a freshly forked (per pipeline compile) slim copy
of that device.
We can't use pipe() here because the fork will not be a direct fork
of the user facing process. Instead we use a previously forked
copy of the process that was forked at device creation in order to
reduce the resources required for the fork and avoid performance
issues.
Fixes: cff53da374 ("radv: enable secure compile support")
This commit is contained in:
parent
ef54f15da9
commit
1663bb1f77
1 changed files with 43 additions and 0 deletions
|
|
@ -2209,6 +2209,49 @@ static bool radv_close_all_fds(const int *keep_fds, int keep_fd_count)
|
|||
return true;
|
||||
}
|
||||
|
||||
static bool secure_compile_open_fifo_fds(struct radv_secure_compile_state *sc,
|
||||
int *fd_server, int *fd_client,
|
||||
unsigned process, bool make_fifo)
|
||||
{
|
||||
bool result = false;
|
||||
char *fifo_server_path = NULL;
|
||||
char *fifo_client_path = NULL;
|
||||
|
||||
if (asprintf(&fifo_server_path, "/tmp/radv_server_%s_%u", sc->uid, process) == -1)
|
||||
goto open_fifo_exit;
|
||||
|
||||
if (asprintf(&fifo_client_path, "/tmp/radv_client_%s_%u", sc->uid, process) == -1)
|
||||
goto open_fifo_exit;
|
||||
|
||||
if (make_fifo) {
|
||||
int file1 = mkfifo(fifo_server_path, 0666);
|
||||
if(file1 < 0)
|
||||
goto open_fifo_exit;
|
||||
|
||||
int file2 = mkfifo(fifo_client_path, 0666);
|
||||
if(file2 < 0)
|
||||
goto open_fifo_exit;
|
||||
}
|
||||
|
||||
*fd_server = open(fifo_server_path, O_RDWR);
|
||||
if(*fd_server < 1)
|
||||
goto open_fifo_exit;
|
||||
|
||||
*fd_client = open(fifo_client_path, O_RDWR);
|
||||
if(*fd_client < 1) {
|
||||
close(*fd_server);
|
||||
goto open_fifo_exit;
|
||||
}
|
||||
|
||||
result = true;
|
||||
|
||||
open_fifo_exit:
|
||||
free(fifo_server_path);
|
||||
free(fifo_client_path);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
static void run_secure_compile_device(struct radv_device *device, unsigned process,
|
||||
int fd_secure_input, int fd_secure_output)
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue