git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
* BUG: fast-import, ftruncate, and file mode
@ 2022-02-23  7:47 Elijah Newren
  2022-02-23 13:59 ` Phillip Wood
  0 siblings, 1 reply; 4+ messages in thread
From: Elijah Newren @ 2022-02-23  7:47 UTC (permalink / raw)
  To: Git Mailing List

Hi,

fast-import makes use of odb_mkstemp(), which creates a secure
temporary file and opens it with mode 0444, and then uses it for its
packfile writing.  Sometimes, fast-import will call its
truncate_pack() function, which makes use of ftruncate().

According to my local manpage, "With ftruncate(), the file must be
open for writing; with truncate(), the file must be writable."

The writable requirement does not appear to be enforced by the kernel
on common filesystems like ext4 or zfs, but this is enforced on some
filesystems.  Apparently a "VxFS Veritas filesystem" got triggered by
this...and some helpful bug reporters tracked this problem down and
found a workaround (for the filter-repo usecase, they recompiled a
special copy of git using mode 0644 for odb_mkstemp, since it was just
an intermediate step anyway and won't be used elsewhere).

I'm not sure if we should (1) just stop calling truncate_pack() in
fast-import (it's merely an optimization), or (2) modify odb_mkstemp()
to allow specifying a mode and also have something like
finalize_object_file() modify the mode before renaming, or (3) if we
should do something else entirely.  Someone more familiar with the
object storage side of things probably knows.  But I'm guessing that
once someone who knows the area states what should be done, that this
might be a small micro-project suitable for the GSoC interns (or
anyone else wanting to get involved)?

Original details from here:
https://github.com/newren/git-filter-repo/issues/342#issuecomment-1047638304

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: BUG: fast-import, ftruncate, and file mode
  2022-02-23  7:47 BUG: fast-import, ftruncate, and file mode Elijah Newren
@ 2022-02-23 13:59 ` Phillip Wood
  2022-02-23 15:33   ` Elijah Newren
  0 siblings, 1 reply; 4+ messages in thread
From: Phillip Wood @ 2022-02-23 13:59 UTC (permalink / raw)
  To: Elijah Newren, Git Mailing List

On 23/02/2022 07:47, Elijah Newren wrote:
> Hi,
> 
> fast-import makes use of odb_mkstemp(), which creates a secure
> temporary file and opens it with mode 0444, and then uses it for its
> packfile writing.  Sometimes, fast-import will call its
> truncate_pack() function, which makes use of ftruncate().
> 
> According to my local manpage, "With ftruncate(), the file must be
> open for writing; with truncate(), the file must be writable."
> 
> The writable requirement does not appear to be enforced by the kernel
> on common filesystems like ext4 or zfs, but this is enforced on some
> filesystems.  Apparently a "VxFS Veritas filesystem" got triggered by
> this...and some helpful bug reporters tracked this problem down and
> found a workaround (for the filter-repo usecase, they recompiled a
> special copy of git using mode 0644 for odb_mkstemp, since it was just
> an intermediate step anyway and won't be used elsewhere).

Am I missing something or is this really a file system bug? Surely if we 
have opened a file for writing the file permissions when we call 
ftruncate() should be irrelevant?

Best Wishes

Phillip

> I'm not sure if we should (1) just stop calling truncate_pack() in
> fast-import (it's merely an optimization), or (2) modify odb_mkstemp()
> to allow specifying a mode and also have something like
> finalize_object_file() modify the mode before renaming, or (3) if we
> should do something else entirely.  Someone more familiar with the
> object storage side of things probably knows.  But I'm guessing that
> once someone who knows the area states what should be done, that this
> might be a small micro-project suitable for the GSoC interns (or
> anyone else wanting to get involved)?
> 
> Original details from here:
> https://github.com/newren/git-filter-repo/issues/342#issuecomment-1047638304


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: BUG: fast-import, ftruncate, and file mode
  2022-02-23 13:59 ` Phillip Wood
@ 2022-02-23 15:33   ` Elijah Newren
  2022-02-23 23:18     ` Junio C Hamano
  0 siblings, 1 reply; 4+ messages in thread
From: Elijah Newren @ 2022-02-23 15:33 UTC (permalink / raw)
  To: Phillip Wood; +Cc: Git Mailing List

On Wed, Feb 23, 2022 at 5:59 AM Phillip Wood <phillip.wood123@gmail.com> wrote:
>
> On 23/02/2022 07:47, Elijah Newren wrote:
> > Hi,
> >
> > fast-import makes use of odb_mkstemp(), which creates a secure
> > temporary file and opens it with mode 0444, and then uses it for its
> > packfile writing.  Sometimes, fast-import will call its
> > truncate_pack() function, which makes use of ftruncate().
> >
> > According to my local manpage, "With ftruncate(), the file must be
> > open for writing; with truncate(), the file must be writable."
> >
> > The writable requirement does not appear to be enforced by the kernel
> > on common filesystems like ext4 or zfs, but this is enforced on some
> > filesystems.  Apparently a "VxFS Veritas filesystem" got triggered by
> > this...and some helpful bug reporters tracked this problem down and
> > found a workaround (for the filter-repo usecase, they recompiled a
> > special copy of git using mode 0644 for odb_mkstemp, since it was just
> > an intermediate step anyway and won't be used elsewhere).
>
> Am I missing something or is this really a file system bug? Surely if we
> have opened a file for writing the file permissions when we call
> ftruncate() should be irrelevant?
>
> Best Wishes
>
> Phillip

Oh, indeed, looks like I can't read late at night.  Sorry for the noise.

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: BUG: fast-import, ftruncate, and file mode
  2022-02-23 15:33   ` Elijah Newren
@ 2022-02-23 23:18     ` Junio C Hamano
  0 siblings, 0 replies; 4+ messages in thread
From: Junio C Hamano @ 2022-02-23 23:18 UTC (permalink / raw)
  To: Elijah Newren; +Cc: Phillip Wood, Git Mailing List

Elijah Newren <newren@gmail.com> writes:

>> Am I missing something or is this really a file system bug? Surely if we
>> have opened a file for writing the file permissions when we call
>> ftruncate() should be irrelevant?
>> ...
> Oh, indeed, looks like I can't read late at night.  Sorry for the noise.

Was wondering the same thing.

We open for writing, write one object at a time and when we realize
we do not have to, we rewind that stream we are writing into using
ftruncate().  It would be a serious problem if we cannot do that.

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2022-02-23 23:18 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-02-23  7:47 BUG: fast-import, ftruncate, and file mode Elijah Newren
2022-02-23 13:59 ` Phillip Wood
2022-02-23 15:33   ` Elijah Newren
2022-02-23 23:18     ` Junio C Hamano

Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).