** Description changed: + = Summary = + + The version of Upstart in precise is affected by a bug in the way that + ".override" [1] file handling is performed. + + If a job has an override file ("/etc/init/*.override") and that override + file is deleted before the corresponding job configuration file + ("/etc/init/*.conf"), there is a possibility of a crash. + + == Explanation == + + When a "/etc/init/*.override" file is deleted, Upstart will + automatically detect this and reload the corresponding + "/etc/init/*.conf" file. + + However, if the ".conf" file (which the ".override" file corresponded + to) is deleted at the same time Upstart attempts to read the ".conf" + file, an assertion failure could result. + + + = Code Specifics = + + The erroneous function is "conf_delete_handler()" which is called + whenever a file Upstart is watching gets deleted. The end of this + function calls conf_reload_path() but although it logs an error message, + it does not consume the error object that gets raised when + conf_reload_path() fails. + + + = Affected Releases = + + This bug is only present in precise: + + - Upstart override handling was introduced in Upstart v1.3: + - Precise currently uses Upstart 1.5-0ubuntu7.2 (and hence is affected). + - Lucid currently uses Upstart 0.6.5-8 (hence, not affected). + - Trusty and Vivid use much newer versions of the Upstart which no + longer contain the problematic code. + + + = Fix = + + The fix is simply to have conf_delete_handler() consume the error object + (by freeing it) when conf_reload_path() fails. + + + = Test Case = + + A reliable test case is unfortunately not possible to create, since the problem comes down to Upstart racing with the deletion of the ".conf" + file. + + However, the patch is small and it can be seen that every other failing + call to conf_reload_path() free's the resulting error object. + + + = Regression Potential = + + None expected. The problem is difficult to trigger anwyay and the patch + can be seen to correct (what is now) an obvious coding error. + + + [1] - http://upstart.ubuntu.com/cookbook/#override-file + + = Original Description = + ubuntu-touch livefs builds have started killing upstart in the host system (in this case, precise, although a similar bug appears to be present in current versions). The livefs build completes, but the host dies shortly after launchpad-buildd starts trying to remove the build chroot. The kernel log looks like this: Mar 10 13:46:55 allspice kernel: [3743880.621603] init: /home/buildd/build-LIVEFSBUILD-22254/chroot-autobuild/build/chroot/etc/init/tty1.conf: Unable to reload configuration after override deletion Mar 10 13:46:55 allspice kernel: [3743880.642455] init: file.c:110: Unhandled error from nih_file_read: No such file or directory Mar 10 13:46:55 allspice kernel: [3743880.754281] init: Caught abort, core dumped Mar 10 13:46:55 allspice kernel: [3743880.754375] init: file.c:110: Unhandled error from nih_file_read: No such file or directory Mar 10 13:46:55 allspice kernel: [3743880.757830] init: Caught abort, core dumped This appears to be because a couple of functions call conf_reload_path, which may leave an nih_error in place if nih_file_read fails, but then do not dispose of the nih_error. The pattern near the end of conf_file_visitor (in precise) is probably appropriate. We're working around this to some extent in livecd-rootfs by removing the .override files first, but it should never be possible for a chroot to crash the host's init.
-- You received this bug notification because you are a member of Ubuntu Bugs, which is subscribed to Ubuntu. https://bugs.launchpad.net/bugs/1430403 Title: ubuntu-touch livefs builds kill upstart in host To manage notifications about this bug go to: https://bugs.launchpad.net/ubuntu/+source/upstart/+bug/1430403/+subscriptions -- ubuntu-bugs mailing list ubuntu-bugs@lists.ubuntu.com https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs