From: Tommi Rantala Date: Mon, 5 Aug 2019 11:01:58 +0000 (+0300) Subject: update-utmp: fix assertion failure if rescue.target, multi-user.target and graphical... X-Git-Tag: v243~71 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=e57cd3fb886d3f298ac3756dcd96d4b142af06a0;p=platform%2Fupstream%2Fsystemd.git update-utmp: fix assertion failure if rescue.target, multi-user.target and graphical.target are all inactive If rescue.target, multi-user.target and graphical.target are all inactive, get_current_runlevel() is not able to determine current runlevel, and returns with zero. This zero runlevel value results to assertion failure in utmp_put_runlevel(). # systemctl stop rescue.target multi-user.target graphical.target # systemctl start systemd-update-utmp-runlevel.service systemd[1]: Stopped target Graphical Interface. systemd[1]: Stopped target Multi-User System. systemd[1]: Starting Update UTMP about System Runlevel Changes... systemd-update-utmp[67]: Assertion 'runlevel > 0' failed at src/shared/utmp-wtmp.c:275, function utmp_put_runlevel(). Aborting. systemd[1]: systemd-update-utmp-runlevel.service: Main process exited, code=dumped, status=6/ABRT systemd[1]: systemd-update-utmp-runlevel.service: Failed with result 'core-dump'. systemd[1]: Failed to start Update UTMP about System Runlevel Changes. Let's just print a warning in this case and skip the utmp update, to avoid systemd-update-utmp-runlevel.service failures. --- diff --git a/src/update-utmp/update-utmp.c b/src/update-utmp/update-utmp.c index bfc78b9..56fb937 100644 --- a/src/update-utmp/update-utmp.c +++ b/src/update-utmp/update-utmp.c @@ -191,6 +191,9 @@ static int on_runlevel(Context *c) { if (runlevel < 0) return runlevel; + if (runlevel == 0) + return log_warning("Failed to get new runlevel, utmp update skipped."); + if (previous == runlevel) return 0;