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:
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user