> What we *can* do is instead add an extra declaration of system time > based on the build/release date of the particular version of the > fake-hwclock package in use, and refuse to back to a date before > *that* unless --force is used. How does that sound?
That sounds like a good policy in general, and it would solve my concerns. Thanks! On Fri, Apr 8, 2016 at 10:50 AM Steve McIntyre <st...@einval.com> wrote: > [ Including a CC to Robie from the previous bug #763589... ] > > Hey guys, > > On Tue, Mar 22, 2016 at 11:37:56PM +0000, Roddy Shuler wrote: > >Package: fake-hwclock > >Version: 0.10 > > > >On bug #763589, protection was added around the save operation so that the > >saved time cannot go backwards without forcing. While this clearly > >mitigates the race condition of concern, I don't believe it is an > >acceptable solution for normal users. > > > >Consider the following use case... > > > >1. The user accidentally sets a wrong time to a date in the future -- for > >example, sets the year to 2017 rather than 2016 > >2. The fake-hwclock.data file is written with the future time > >3. The user then realizes the mistake, and tries to fix the time back to > >the year 2016 > >4. Now, the cron job and service will not update the fake-hwclock.data, > >since it appears that the current system time is in the past (relative to > >the invalid saved time) > >5. On reboot, the clock reverts to the future date in the year 2017, and > >continues to do so on every reboot for the next year (unless the user is > >advanced enough to know to manually run the script with the force flag) > > > >Other than races on startup, the normal case is that the system time will > >not go backwards unless it was intentionally changed (either by a user or > >by an update from an NTP server), so I don't believe it makes sense to > >reject such saves by default. (The protection for loads, on the other > >hand, is clearly needed.) > > > >For my specific use case, I simply reverted to the original behavior > >without any protection against saving, but I suppose the upstream solution > >would require an alternate solution to the race reported on #763589. > > Right. > > And in #763589 we have: > > >I've observed a system with a correctly working fake-hwclock > >(originally initalised by NTP) set its time back to shortly after the > >epoch, including in /etc/fake-hwclock.data. > > > >I believe this happened because "fake-hwclock save" was called after > >boot before "fake-hwclock load" was called. > > > >I think this happens in the case of a very early shutdown event that > >calls "/etc/init.d/rc 0" before "/etc/init.d/rcS" has completed. > > > >In my case, I have a Raspberry Pi rigged with an external shutdown > >signal hooked up via udev. If the signal is "high" at boot time, then > >the Pi shuts down without fully booting up. > > > >I'm not entirely sure that this is the cause, but the race is there. > > We have two conflicting requirements here, I think. Thanks for > explaining your logic, both of you. > > The problem is that I don't think there's a good solution to both > problems here. We can't *know* that the system time has been read from > fake-hwclock.data before calling "save". I briefly considered adding a > "I've seen this" flag that could be set in "load", but that's no > guarantee at all - if we power down unexpectedly then it'll be set > already at next boot. > > What we *can* do is instead add an extra declaration of system time > based on the build/release date of the particular version of the > fake-hwclock package in use, and refuse to back to a date before > *that* unless --force is used. How does that sound? > > Or can you think of any other possible fixes here? > > [ I've also just realised that I'll need to go back and re-add > initramfs support now that we automatically attempt to mount and > fsck /usr in the initramfs. Joy \o/ ] > > -- > Steve McIntyre, Cambridge, UK. > st...@einval.com > "I suspect most samba developers are already technically insane... Of > course, since many of them are Australians, you can't tell." -- Linus > Torvalds > > -- ............................................................................ *Roddy Shuler* | +1.585.530.7960 | Endless