hush: protect against self-modifying trap code
function old new delta check_and_run_traps 211 236 +25 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
6f9442ff30
commit
749575d3c5
@ -2004,10 +2004,12 @@ static int check_and_run_traps(void)
|
|||||||
smalluint save_rcode;
|
smalluint save_rcode;
|
||||||
char *argv[3];
|
char *argv[3];
|
||||||
/* argv[0] is unused */
|
/* argv[0] is unused */
|
||||||
argv[1] = G_traps[sig];
|
argv[1] = xstrdup(G_traps[sig]);
|
||||||
|
/* why strdup? trap can modify itself: trap 'trap "echo oops" INT' INT */
|
||||||
argv[2] = NULL;
|
argv[2] = NULL;
|
||||||
save_rcode = G.last_exitcode;
|
save_rcode = G.last_exitcode;
|
||||||
builtin_eval(argv);
|
builtin_eval(argv);
|
||||||
|
free(argv[1]);
|
||||||
//FIXME: shouldn't it be set to 128 + sig instead?
|
//FIXME: shouldn't it be set to 128 + sig instead?
|
||||||
G.last_exitcode = save_rcode;
|
G.last_exitcode = save_rcode;
|
||||||
last_sig = sig;
|
last_sig = sig;
|
||||||
|
Loading…
Reference in New Issue
Block a user