qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Jamie Lokier <jamie@shareable.org>
To: qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] How are the temporary files (-snapshot) created on Linux?
Date: Fri, 12 Sep 2008 17:57:17 +0100	[thread overview]
Message-ID: <20080912165716.GB12849@shareable.org> (raw)
In-Reply-To: <1221218698.7793.0@ecrins>

Steve Fosdick wrote:
> On 12/09/08 11:18:50, Yann E. MORIN wrote:
> > Hello!
> > 
> > On Friday 12 September 2008 08:04:02 EQX wrote:
> > > The code says the -snapshot temporary files are created here:  
> > > /tmp/vl.*, but they are never visible for users. Using lsof,
> > > they have a state of 'deleted'. How does this work exactly?
> > > What type of file is this?
> > 
> > It's done via some incantation of open(2) followed by unlink(2),
> > something
> > like:
> > 
> >   int fd;
> >   fd = open( "/tmp/vl.xxx", O_CREAT|... );
> >   unlink( "/tmp/vl.xxx" );
> >   /* Use the file somehow */
> >   close( fd );
> > 
> > Regards,
> > Yann E. MORIN.
> 
> There is nothing special about the files concerned.  The key to this is 
> that, unlike some other operating systems, Linux (like Unix) allows an 
> open file to be deleted and has a well defined way to deal with that 
> happenning.
> 
> When an open file is deleted only the file name is actually deleted.  
> The data in the file (and any new data written to the file) are kept 
> until the last process to have the file open closes the file whereupon 
> the second half of the delete happens, i.e. deallocating the disk 
> storage and returning it to the free space.
> 
> This mechanism is exploited by a process that opens a file and 
> immediately deletes it like the example above for two reasons:
> 
> 1. It provides a way to guarantee that the file not exist after the 
> process concerned has finished even if it finishes abnormally or gets 
> killed for some reason.
> 
> 2. As a security measure.  Once the file name has been deleted there is 
> no way for any other process to stumble upon the file and open it.
> 
> The second point is negated somewhat by the /proc filesystem.

Also both points are negated for a brief time window by the fact you
have to have the file exist momentarily - there's no O_UNLINK flag to open.

-- Jamie

      parent reply	other threads:[~2008-09-12 16:57 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-09-12  6:04 [Qemu-devel] How are the temporary files (-snapshot) created on Linux? EQX
2008-09-12 10:18 ` Yann E. MORIN
2008-09-12 11:24   ` Steve Fosdick
2008-09-12 14:52     ` EQX
2008-09-12 16:57     ` Jamie Lokier [this message]

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=20080912165716.GB12849@shareable.org \
    --to=jamie@shareable.org \
    --cc=qemu-devel@nongnu.org \
    /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;
as well as URLs for NNTP newsgroup(s).