|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [XEN RFC for-4.14] Re: use of "stat -"
On 25.06.2020 04:37, Jason Andryuk wrote:
> On Wed, Jun 24, 2020 at 12:19 PM Ian Jackson <ian.jackson@xxxxxxxxxx> wrote:
>>
>> Jan Beulich writes ("Re: use of "stat -""):
>>> [CAUTION - EXTERNAL EMAIL] DO NOT reply, click links, or open attachments
>>> unless you have verified the sender and know the content is safe.
>>> On 14.05.2020 13:02, Ian Jackson wrote:
>>>> I've read this thread. Jan, I'm sorry that this causes you
>>>> inconvenience. I'm hoping it won't come down to a choice between
>>>> supporting people who want to ship a dom0 without perl, and people who
>>>> want a dom0 using more-than-a-decade-old coreutils.
>>>>
>>>> Jan, can you tell me what the output is of this on your ancient
>>>> system:
>>>>
>>>> $ rm -f t
>>>> $ >t
>>>> $ exec 3<t
>>>> $ stat -L -c '%F %i' /dev/stdin <&3
>>>> regular empty file 393549
>>>> $ rm t
>>>> $ stat -L -c '%F %i' /dev/stdin <&3
>>>> regular empty file 393549
>>>> $ strace -ou stat -L -c '%F %i' /dev/stdin <&3
>>>> $
>>>
>>> $ rm -f t
>>> $ >t
>>> $ exec 3<t
>>> $ stat -L -c '%F %i' /dev/stdin <&3
>>> regular empty file 3380369
>>> $ rm t
>>> $ stat -L -c '%F %i' /dev/stdin <&3
>>> regular empty file 3380369
>>> $ strace -ou stat -L -c '%F %i' /dev/stdin <&3
>>> regular empty file 3380369
>>>
>>>> Also, the contents of the file "u" afterwards, please.
>>>
>>> Attached.
>>
>> Thanks.
>>
>> I think this means that `stat -' can be replaced by `stat /dev/stdin'.
>>
>> This script is only run on Linux where /dev/stdin has existed
>> basically forever. The strace output shows
>> stat("/dev/stdin", {st_mode=S_IFREG|0644, st_size=0, ...}) = 0
>> and the transcript shows that your stat(1) behaves as I hope.
>>
>> Jan, will you send a patch ? It is best if someone else but me writes
>> it and tests it because then I am a "clean" reviewer.
I was about to, when I saw this reply from Jason.
>> Paul, supposing I review such a patch and say it is low risk, and we
>> commit it by Friday, can it have a release-ack ?
>
> I was going to just write a patch to replace - with /dev/stdin and ask
> Jan to test it. When I opened the script, this comment was staring at
> me:
> # We can't just stat /dev/stdin or /proc/self/fd/$_lockfd or
> # use bash's test -ef because those all go through what is
> # actually a synthetic symlink in /proc and we aren't
> # guaranteed that our stat(2) won't lose the race with an
> # rm(1) between reading the synthetic link and traversing the
> # file system to find the inum.
>
> On my system:
> $ ls -l /dev/stdin
> lrwxrwxrwx 1 root root 15 Jun 24 21:13 /dev/stdin -> /proc/self/fd/0
> $ ls -l /proc/self/fd/0 0<lockfile
> lrwx------ 1 jason jason 64 Jun 24 21:26 /proc/self/fd/0 ->
> /home/jason/lockfile
>
> stat /dev/stdin will work around the lack of `stat -` support, but it
> doesn't address the race in the comment. Is the comment valid? How
> would we prove there is no race for /dev/stdin? And as a refresher,
> `stat -` does an fstat(0), so there is no symlink lookup. Or is there
> no race since `stat /proc/self/fd/0` isn't a symlink lookup but just
> accessing the already open fd via the proc special file? i.e.
> equivalent to fstat.
Looking at vfs_statx() in the kernel, I can't see any provisions to
get at the data without traversing the specified path.
Jan
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |