1
0
mirror of https://sourceware.org/git/glibc.git synced 2026-01-06 11:51:29 +03:00

posix_spawn_file_actions_addopen needs to copy the path argument (BZ 17048)

POSIX requires that we make a copy, so we allocate a new string
and free it in posix_spawn_file_actions_destroy.

Reported by David Reid, Alex Gaynor, and Glyph Lefkowitz.  This bug
may have security implications.
This commit is contained in:
Florian Weimer
2014-06-11 23:12:52 +02:00
parent c3a2ebe1f7
commit 89e435f355
6 changed files with 54 additions and 8 deletions

View File

@@ -18,11 +18,29 @@
#include <spawn.h>
#include <stdlib.h>
/* Initialize data structure for file attribute for `spawn' call. */
#include "spawn_int.h"
/* Deallocate the file actions. */
int
posix_spawn_file_actions_destroy (posix_spawn_file_actions_t *file_actions)
{
/* Free the memory allocated. */
/* Free the paths in the open actions. */
for (int i = 0; i < file_actions->__used; ++i)
{
struct __spawn_action *sa = &file_actions->__actions[i];
switch (sa->tag)
{
case spawn_do_open:
free (sa->action.open_action.path);
break;
case spawn_do_close:
case spawn_do_dup2:
/* No cleanup required. */
break;
}
}
/* Free the array of actions. */
free (file_actions->__actions);
return 0;
}