diff options
-rw-r--r-- | src/cerberus.c | 3 | ||||
-rw-r--r-- | src/passphrase.c | 20 |
2 files changed, 19 insertions, 4 deletions
diff --git a/src/cerberus.c b/src/cerberus.c index 3a5dd5d..ce60846 100644 --- a/src/cerberus.c +++ b/src/cerberus.c @@ -129,6 +129,9 @@ int main(int argc, char** argv) #endif secure_tty(tty_group); + /* Redisable echoing */ + disable_echo(); + /* Set up clean quiting and time out */ signal(SIGALRM, timeout_quit); diff --git a/src/passphrase.c b/src/passphrase.c index 9482ba1..50c957f 100644 --- a/src/passphrase.c +++ b/src/passphrase.c @@ -46,11 +46,18 @@ char* get_passphrase(void) we will not do that under normal usecases, if we do, it okay to segfault on null derefencing and quit on that. */ - char* rc = malloc(START_PASSPHRASE_LIMIT); + char* rc = malloc(START_PASSPHRASE_LIMIT * sizeof(char)); long size = START_PASSPHRASE_LIMIT; long len = 0; int c; + if (rc == NULL) + { + perror("malloc"); + sleep(ERROR_SLEEP); + _exit(1); + } + /* Read password until EOF or Enter, skip all ^0 as that is probably not a part of the passphrase (good luck typing that in X.org) and can be echoed into stdin by the kernel. */ @@ -63,7 +70,12 @@ char* get_passphrase(void) { *(rc + len++) = c; if (len == size) - rc = realloc(rc, size <<= 1L); + if ((rc = realloc(rc, (size <<= 1L) * sizeof(char))) == NULL) + { + perror("realloc"); + sleep(ERROR_SLEEP); + _exit(1); + } } } @@ -81,8 +93,8 @@ void disable_echo(void) { struct termios stty; - tcgetattr(STDIN_FILENO, &saved_stty); - stty = saved_stty; + tcgetattr(STDIN_FILENO, &stty); + saved_stty = stty; stty.c_lflag &= ~ECHO; tcsetattr(STDIN_FILENO, TCSAFLUSH, &stty); } |