[PATCH v9] seedrng: import SeedRNG utility for kernel RNG seed files
Denys Vlasenko
vda.linux at googlemail.com
Fri Apr 29 16:04:31 UTC 2022
On Wed, Apr 27, 2022 at 6:55 PM Jason A. Donenfeld <Jason at zx2c4.com> wrote:
> On Wed, Apr 27, 2022 at 06:15:50PM +0200, Denys Vlasenko wrote:
> > if ((unlink(filename) < 0 || fsync(dfd) < 0) && seed_len) {
> > bb_perror_msg("can't%s seed", " remove");
> > return -1;
> > }
> >
> > Why can't the entire above if() be replaced with xunlink(filename) ?
>
> It cannot be replaced with that. The fsync() must happen before other
> operations move forward,
Why? It should be explained in a comment, and explained well enough
so that future developers do not repeatedly try to remove it
because "I don't see why it's necessary".
> and exiting the program isn't necessarily the
> correct course of action.
Let's see.
If we opened the file, read it, and then failed to unlink it,
it means that filesystem is read-only, there is a permission problem
(e.g. SELinux), or there is an I/O error.
All of these cases mean that the system is not in expected state,
and further efforts to "continue as normal" (e.g. try to rewrite
/var/lib/seedrng/seed.credit) do not seem likely to be productive to me.
I think it's better to just complain and exit.
More information about the busybox
mailing list