On 01/05/2017 02:08 PM, Mark Wielaard wrote:
On Thu, Jan 05, 2017 at 12:27:52PM +0200, Panu Matilainen wrote:
It looks commit bbfe1f86b2e4b5c0bd499d9f3dd9de9c9c20fff2 intends to skip
symlinks since it filters on S_ISREG(), but since uses fstat()
on already open()'ed file it ends up stat()'ing the symlink target.
Flip stat() + open() around and use lstat() instead to fix it.
Oops. You are right.
I think I was trying to guard for TOCTOU (time of check time of use)
issues (where the file might change between the stat check and the open
call.
Ok, thanks for confirming.
I think just changing fstat into an lstat without flipping the
open/stat around would also do the right thing (given that the lstat
will be on the diskPath not the fd). But that would be the TOCTOU in
reverse of course. And I assume that if the build dir is still
changing at this point we have other issues creating the file list.
Yup, that'd also work of course but opening files that we will be
skipping seems wasteful/redundant/silly :) Nobody is supposed to be
messing around rpm's back in the build directories so you generally
don't need to worry about concurrency there.
- Panu -
_______________________________________________
Rpm-maint mailing list
Rpm-maint@lists.rpm.org
http://lists.rpm.org/mailman/listinfo/rpm-maint