On Tue, Oct 27, 2020 at 09:42:55PM +0100, Michael Weiß wrote: > Time namespaces make it possible to virtualize time inside of > containers, e.g., it is feasible to reset the uptime of a container > to zero by setting the time namespace offset for boottime to the > negated current value of the CLOCK_BOOTTIME. > > However, the boot time stamp provided by getboottime64() does not > take care of time namespaces. The resulting boot time stamp 'btime' > provided by /proc/stat does not show a plausible time stamp inside > the time namespace of a container. > > We address this by shifting the value returned by getboottime64() > by subtracting the boottime offset of the time namespace. > (A selftest to check the expected /proc/stat 'btime' inside the > namespace is provided.) > > Further, to avoid to show processes as time travelers inside of the > time namespace the boottime offset then needs to be added to the > start_boottime provided by the task_struct. > > v5 Changes: > Added tags, Thanks Andrei and Thomas for reviews and comments. > Updated commit message of [2/3] as indicated by Thomas. > > v4 Changes: > Avoid type conversions back and forth between timespec64 and ktime_t > in 'proc/stat.c' as suggested by Andrei. > Introduced timens_sub_boottime() in 'time_namespace.h' to provide > better coder readability/consistency. > > v3 Changes: > leave getboottime64() unchanged and shift the boot timestamp in > 'fs/proc/stat.c' as result of the discussion with Andrei and Thomas. > > v2 Changes: > Fixed compile errors with TIME_NS not set in config
Thank you Michael, Acked-by: Christian Brauner <christian.brau...@ubuntu.com> As discussed with Thomas, I'm picking this up now! Thanks! Christian