Hide Forgot
This problem is very difficult to reproduce. It did happen all the time with the command: $ su - The analysis of the code path shows: if (!(announce & LASTLOG_QUIET)) { if (last_login.ll_time) { /* we want the date? */ if (announce & LASTLOG_DATE) { struct tm *tm, tm_buf; time_t ll_time; ll_time = last_login.ll_time; tm = localtime_r (&ll_time, &tm_buf); strftime (the_time, sizeof (the_time), /* TRANSLATORS: "strftime options for date of last login" */ _(" %a %b %e %H:%M:%S %Z %Y"), tm); The localtime_r call returns NULL, then it pass NULL to strftime, and crashes. It should check the return value of localtime_r before calling strftime. The user was told to execute: # sed -e 's/\(pam_lastlog.so.*\)/\1 nodate/g' -i /etc/pam.d/postlogin that fixed the problem, but more interestingly, after reverting the sed script change, it continued to work, so, the problem appears to have been a corrupted last_login.ll_time, that may have been a corrupted /var/log/lastlog
Since the problem described in this bug report should be resolved in a recent advisory, it has been closed with a resolution of ERRATA. For information on the advisory, and where to find the updated files, follow the link below. If the solution does not work for you, open a new bug report. https://rhn.redhat.com/errata/RHBA-2016-2314.html