[Merge] lp:~jamesodhunt/upstart/bug-530779 into lp:upstart

Steve Langasek steve.langasek at canonical.com
Sun Dec 1 06:48:30 UTC 2013


Review: Needs Fixing

@@ -275,7 +280,18 @@
        if (! state_check_json_type (json_processes, array))
                goto error;
 
-       for (i = 0; i < json_object_array_length (json_processes); i++) {
+       len = json_object_array_length (json_processes);
+
+       if (len > PROCESS_LAST) {
+               /* Detected a downgrade on re-exec scenario (where we
+                * are attempting to restore state from a newer init
+                * which contains additional processes
+                */
+               nih_warn ("%s", _("Detected unsupported downgrade on re-exec"));
+               goto error;
+       }
+
+       for (i = 0; i < len; i++) {
                json_object *json_process;
 
                nih_assert (i <= PROCESS_LAST);

The result of this is that, instead of deserializing those processes that are known, on any downgrade to a version that tracked fewer processes, all information will be discarded about all processes associated with jobs.  This is effectively equivalent to a stateless reexec, and is not a very graceful handling of this case.

I don't feel very strongly in general about supporting downgrades; but in a case such as this where you need to explicitly handle the difference in the number of related processes, it seems to me that a graceful handling is as easy to accomplish as the ungraceful alternative.
-- 
https://code.launchpad.net/~jamesodhunt/upstart/bug-530779/+merge/197080
Your team Upstart Reviewers is subscribed to branch lp:upstart.



More information about the upstart-devel mailing list