From: David Herrmann Date: Sun, 28 Oct 2012 15:17:18 +0000 (+0100) Subject: uterm: vt: fix race by blocking signals before setting them X-Git-Tag: kmscon-7~268 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=4a4ccec3634615a4ad21d7635a4259bf4af2905b;p=platform%2Fupstream%2Fkmscon.git uterm: vt: fix race by blocking signals before setting them We must block the signals before setting the signal handlers to avoid retrieving them asynchronously. Signed-off-by: David Herrmann --- diff --git a/src/uterm_vt.c b/src/uterm_vt.c index 433c6be..3e77870 100644 --- a/src/uterm_vt.c +++ b/src/uterm_vt.c @@ -312,6 +312,16 @@ static int real_open(struct uterm_vt *vt, const char *vt_for_seat0) goto err_reset; } + sigemptyset(&mask); + sigaddset(&mask, SIGUSR1); + sigaddset(&mask, SIGUSR2); + ret = sigprocmask(SIG_BLOCK, &mask, NULL); + if (ret) { + log_error("cannot block SIGUSR1/2 (%d): %m", errno); + ret = -EFAULT; + goto err_text; + } + memset(&mode, 0, sizeof(mode)); mode.mode = VT_PROCESS; mode.acqsig = SIGUSR1; @@ -343,13 +353,6 @@ static int real_open(struct uterm_vt *vt, const char *vt_for_seat0) goto err_setmode; } - sigemptyset(&mask); - sigaddset(&mask, SIGUSR1); - sigaddset(&mask, SIGUSR2); - ret = sigprocmask(SIG_BLOCK, &mask, NULL); - if (ret) - log_warning("cannot ignore SIGUSR1/2 (%d): %m", errno); - return 0; err_setmode: