From: Marcelo Tosatti <marcelo.tosatti@cyclades.com>
To: Andrey Savochkin <saw@saw.sw.com.sg>
Cc: Jirka Kosina <jikos@jikos.cz>,
Giuliano Pochini <pochini@shiny.it>,
linux-kernel@vger.kernel.org
Subject: Re: FW: Linux kernel file offset pointer races
Date: Thu, 12 Aug 2004 10:53:42 -0300 [thread overview]
Message-ID: <20040812135342.GA20512@logos.cnet> (raw)
In-Reply-To: <20040812115531.A16166@castle.nmd.msu.ru>
Hi Andrey,
On Thu, Aug 12, 2004 at 11:55:31AM +0400, Andrey Savochkin wrote:
> On Wed, Aug 11, 2004 at 06:14:30PM -0300, Marcelo Tosatti wrote:
> > On Wed, Aug 11, 2004 at 06:26:02PM +0400, Andrey Savochkin wrote:
> > > BTW, f_pos assignments are non-atomic on IA-32 since it's a 64-bit value.
> > > The file position is protected by the BKL in llseek(), but I do not see any
> > > serialization neither in sys_read() nor in generic_file_read() and other
> > > methods.
> > >
> > > Have we accepted that the file position may be corrupted after crossing 2^32
> > > boundary by 2 processes reading in parallel from the same file?
> > > Or am I missing something?
> >
> > Yes, as far as I know, parallel users of the same file descriptions (which
> > can race on 64-bit architectures) is expected, we dont care about handling it.
> >
> > Behaviour is undefined.
>
> I prefer explainable behaviours :)
Do the locking in the concurrent userspace pos users, then :)
> If 2 processes start reading at offset 0xfffffffe, and one of them reads 1
> byte and the second 2 bytes, I can expect the file position be 0xffffffff,
> 0x100000000, 0x100000001, or, in the worst case, 0xfffffffe again.
> But 0x1ffffffff will be a real surprise.
>
> For a bigger surprise, we can kill one of the processes with SIGFPE if we
> find that the processes perform such an "incorrect" parallel read and the
> file position has changed behind us ;)
> But we don't want that much undefined behaviour, do we? :)
quoting viro:
"FWIW, anybody who mixes read() and lseek() on the same descriptor without
logics in their code serializing those are also getting what they'd asked
for - GIGO. It should not break the kernel, obviously, but kernel has no
business being nice to inherently racy userland code. BTW, you do realize
that lseek() in the middle of read() on the same descriptor will be lost?
On regular files, on quite a few Unices, Linux included."
We dont guarantee serialization of a file's descriptor
(I mistyped "file description" in the last email) f_pos.
Thats up to the user application.
Makes sense to me.
next prev parent reply other threads:[~2004-08-12 15:06 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-08-05 8:42 FW: Linux kernel file offset pointer races Giuliano Pochini
2004-08-05 10:30 ` Jirka Kosina
2004-08-07 17:15 ` Marcelo Tosatti
2004-08-11 14:26 ` Andrey Savochkin
2004-08-11 21:14 ` Marcelo Tosatti
2004-08-12 7:55 ` Andrey Savochkin
2004-08-12 13:53 ` Marcelo Tosatti [this message]
2004-08-09 8:33 ` Frank Steiner
2004-08-09 14:45 ` Alan Cox
2004-08-09 16:50 ` Jonathan Corbet
2004-08-09 17:24 ` Linus Torvalds
2004-08-10 6:08 ` Frank Steiner
2004-08-05 20:34 ` Alan Cox
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20040812135342.GA20512@logos.cnet \
--to=marcelo.tosatti@cyclades.com \
--cc=jikos@jikos.cz \
--cc=linux-kernel@vger.kernel.org \
--cc=pochini@shiny.it \
--cc=saw@saw.sw.com.sg \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox