From: Karel Zak Date: Wed, 15 Jan 2020 12:18:15 +0000 (+0100) Subject: lslogins: assume unterminated strings in wtmp/btmp [coverity scan] X-Git-Tag: v2.35~16 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=3b28b4686c194ee929db63090e9b29f7d8423d04;p=thirdparty%2Futil-linux.git lslogins: assume unterminated strings in wtmp/btmp [coverity scan] Let's use mem2strcpy() to be robust. Signed-off-by: Karel Zak --- diff --git a/login-utils/lslogins.c b/login-utils/lslogins.c index 3d9c9b97a2..6e2d0ff25f 100644 --- a/login-utils/lslogins.c +++ b/login-utils/lslogins.c @@ -740,12 +740,20 @@ static struct lslogins_user *get_user_info(struct lslogins_control *ctl, const c } break; case COL_LAST_TTY: - if (user_wtmp) - user->last_tty = xstrdup(user_wtmp->ut_line); + if (user_wtmp) { + user->last_tty = xmalloc(sizeof(user_wtmp->ut_line) + 1); + mem2strcpy(user->last_tty, user_wtmp->ut_line, + sizeof(user_wtmp->ut_line), + sizeof(user_wtmp->ut_line) + 1);; + } break; case COL_LAST_HOSTNAME: - if (user_wtmp) - user->last_hostname = xstrdup(user_wtmp->ut_host); + if (user_wtmp) { + user->last_hostname = xmalloc(sizeof(user_wtmp->ut_host) + 1); + mem2strcpy(user->last_hostname, user_wtmp->ut_host, + sizeof(user_wtmp->ut_host), + sizeof(user_wtmp->ut_host) + 1);; + } break; case COL_FAILED_LOGIN: if (user_btmp) { @@ -754,8 +762,12 @@ static struct lslogins_user *get_user_info(struct lslogins_control *ctl, const c } break; case COL_FAILED_TTY: - if (user_btmp) - user->failed_tty = xstrdup(user_btmp->ut_line); + if (user_btmp) { + user->failed_tty = xmalloc(sizeof(user_btmp->ut_line) + 1); + mem2strcpy(user->failed_tty, user_btmp->ut_line, + sizeof(user_btmp->ut_line), + sizeof(user_btmp->ut_line) + 1);; + } break; case COL_HUSH_STATUS: user->hushed = get_hushlogin_status(pwd, 0);