OP and I worked through this; see comments & chat for details. First, OP changed
/sbin/sulogin
to find the problem process and location, this line in /etc/init/mountall-shell.conf
/sbin/sulogin
was changed to
/usr/bin/ltrace -S -f -o /root/sulogin-ltrace.log /bin/sulogin
Excerpt from log:
837 crypt("password", "x") = nil
837 strcmp(nil, "x" <no return ...>
837 --- SIGSEGV (Segmentation fault)
The log indicates that the segfault occurs in the following code in sulogin, where crypt is returning NULL.
if ((p = getpasswd(pwd->pw_passwd)) == NULL) break;
if (pwd->pw_passwd[0] == 0 ||
strcmp(crypt(p, pwd->pw_passwd), pwd->pw_passwd) == 0)
sushell(pwd);
Next question is, what's causing crypt to return NULL?
OP saidconfirmed that the encrypted password really was x; the shadow entry for root iswas root:x:16273:0:99999:7:::. TheIn a stock Ubuntu 14.04, root's encrypted password is ! in a stock Ubuntu 14.04 system; they; OP had changed it to x awhile ago and this is the first time since then that OP hashe's had to use single-user mode.
suloginsulogin has its own interpretation of special encrypted passwords. If it sees * or !, it lets the user in with no password. Anything else, it does some validity checking, but "x"x sails right through, yet crypt doesn't like it (salt not long enough?) and returns NULL.
OP is going to file a bug report for sysvinit-utils; sulogin ought to handle a NULL return from crypt more gracefully.