https://sourceware.org/bugzilla/show_bug.cgi?id=28240
Mark Wielaard <mark at klomp dot org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |mark at klomp dot org Resolution|FIXED |--- Status|RESOLVED |REOPENED --- Comment #2 from Mark Wielaard <mark at klomp dot org> --- So this makes most uses for the user "root" correct, but still contains a race condition: + /* TOCTOU non-problem: if another task races, puts a working + download or a 000 file in its place, unlinking here just + means WE will try to download again as uncached. */ unlink(target_cache_path); } + + /* If the target is already in the cache (known not-000 - PR28240), + then we are done. */ + int fd = open (target_cache_path, O_RDONLY); + if (fd >= 0) + { + /* Success!!!! */ + if (path != NULL) + *path = strdup(target_cache_path); + rc = fd; + goto out; + } The problem isn't when WE try to download and/or (re)set the 000 file. The problem is if someone other client races past us after the unlink and puts a 000 file back (because the server still doesn't have it). Then the open will again succeed for us, but the target is 000. -- You are receiving this mail because: You are on the CC list for the bug.