Dynamic software updating c
Linux 4.0 DSU support is a far cry from supporting Vaughan-Nichols’ hope that “With Linux 4.0, updates to a program we can make statically we can also make dynamically.
I.e., we should be able to add new functions, change function types (e.g., to have new or different arguments), or modify data structures, e.g., by adding new data elements, breaking apart or changing the types of existing elements, adding and removing pointers, etc.
In this post, co-authored with my Ph D student Luís Pina, I take a closer look at the challenge that DSU presents, showing that what Linux will support is still quite far from what we might hope for, but that ideas from the research community promise to get us closer to the ideal, both for operating systems and hopefully for many other applications as well. If in the updated program the entries of a hash table are extended with a timeout field, then a dynamic update needs to convert in-memory hashtable entries to now contain a timeout field; otherwise, when the updated code goes to access that field, it will behave unpredictably.
Or, if the new code uses two threads to perform some functionality which in the old version requires only one thread, then we need to map the existing thread’s stack to an equivalent one for the new code, and start a new thread to handle the extracted functionality.
This approach, however, introduces a lot of complexity (and opportunities for bugs) as the code is maintained and patched further, going ahead.Just the checkpointing and re-reading from disk could take tens of minutes.With rebootless patching, this disruption is avoided; cf.As such, delaying the update until this condition is satisfied means the control state of the running kernel is valid for the new code. Unfortunately, this assumption fails to account for the of prior execution of changed functions on the program’s data, even if the role of that data is the same between versions.Consider the following example (distilled from our prior work on dynamically updating Open SSH daemons): Old version: Consider that a process is executing function go, which was not patched, right after function setup returned and before calling function handle.