Linux NFS development
 help / color / mirror / Atom feed
From: Peter Staubach <staubach@redhat.com>
To: Olaf Kirch <olaf.kirch@oracle.com>
Cc: Neil Brown <neilb@suse.de>, Steve Dickson <SteveD@redhat.com>,
	Christoph Hellwig <hch@infradead.org>,
	Matthias Koenig <mkoenig@novell.com>,
	nfs@lists.sourceforge.net,
	Javier Fern?ndez-Sanguino Pe?a <jfs@computer.org>,
	anibal@debian.org
Subject: Re: Portmap - was Re: Does mountd/statd really need to listen on a privileged port??
Date: Fri, 27 Apr 2007 13:06:38 -0400	[thread overview]
Message-ID: <46322D9E.6070707@redhat.com> (raw)
In-Reply-To: <200704271849.57729.olaf.kirch@oracle.com>

Olaf Kirch wrote:
> On Friday 27 April 2007 16:01, Peter Staubach wrote:
>   
>> It seems to me that you are still missing the point of the lock.
>>
>> The lock is not being used to protect the assignment of the address
>> of clnt_raw_private to clp, it is being used to ensure that clp is not
>> being used before clnt_raw_private is completely initialized.
>>
>> The lock is also used to ensure that multiple copies of clnt_raw_private
>> are not allocated.
>>     
>
> Are we talking of the same piece of code? Can you explain to me how
> the following, which is  a copy of Bull's TIRPC library, ensures this?
>
> clntraw_create:
>
>         struct clntraw_private *clp = clntraw_private;
> [...]
>
>         mutex_lock(&clntraw_lock);
>         if (clp == NULL) {
>                 clp = (struct clntraw_private *)calloc(1, sizeof (*clp));
>                 if (clp == NULL) {
>                         mutex_unlock(&clntraw_lock);
>                         return NULL;
>                 }
> [...]
>                 clntraw_private = clp;
>         }
>
> Assume 2 threads enter clntraw_create simultaneously,
> and clntraw_private is NULL.
> Both execute clp = clntraw_private, and both see a
> value of  NULL. Thread A grabs the mutex, thread B blocks.
>
> Thread A finds clp == NULL, allocates memory, puts the
> pointer into clntraw_private, does clever stuff and releases the
> mutex.
>
> Thread B wakes up, acquires the mutex. It checks
> clp, which is still NULL, and allocates another
> private object.
>
> I really do think I understand the code, and there is
> a problem. The mutex protects the clntraw_private
> pointer, so the only safe thing to do is access that
> variable while holding the lock, *not* before.
>   

You are right, the code snippet above is obviously incorrect.

My apologies, I was looking at two different pieces of code and
commented about one, in response to comments about the other.  I
also hadn't realized that you were talking about clntraw_create
because there are several other instances of pretty much the
same construct in other places in the same file.

The newer versions of the TI-RPC support have this bug fixed.
Plus, they use the global variable, clnt_raw_private, instead of
clntraw_private.  (That's why I changed the name in my response...)

       ps

-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
NFS maillist  -  NFS@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/nfs

  reply	other threads:[~2007-04-27 17:06 UTC|newest]

Thread overview: 82+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-04-12 22:05 Does mountd/statd really need to listen on a privileged port?? Neil Brown
2007-04-13  0:05 ` Trond Myklebust
2007-04-16  1:03   ` Neil Brown
2007-04-13  0:55 ` Mike Frysinger
2007-04-13  1:09   ` Mike Frysinger
2007-04-13  1:39   ` Neil Brown
2007-04-13  2:04     ` Mike Frysinger
2007-04-17 10:14     ` Olaf Kirch
2007-04-17 11:12       ` Mike Frysinger
2007-04-16 18:13 ` Steve Dickson
2007-04-17 10:08   ` Olaf Kirch
2007-04-17 11:21     ` Mike Frysinger
2007-04-17 11:32       ` Olaf Kirch
2007-04-18  7:14     ` Neil Brown
2007-04-19  0:46       ` Neil Brown
2007-04-19  1:21         ` Javier Fernández-Sanguino Peña
2007-04-20  3:04           ` Portmap - was " Neil Brown
2007-04-20  6:49             ` Olaf Kirch
2007-04-20  8:02               ` Neil Brown
2007-04-20 13:27                 ` Olaf Kirch
2007-04-20 19:18             ` Steve Dickson
2007-04-23  4:03               ` Neil Brown
2007-04-23  6:31                 ` Neil Brown
2007-04-23 13:43                   ` Steve Dickson
2007-04-24  0:56                     ` Neil Brown
2007-04-24 17:13                       ` Steve Dickson
2007-04-23 13:28                 ` Steve Dickson
2007-04-23 23:09                   ` Neil Brown
2007-04-24  6:43                     ` Olaf Kirch
2007-04-24  7:24                       ` Neil Brown
2007-04-24 15:15                         ` Talpey, Thomas
2007-04-24 15:31                           ` Talpey, Thomas
2007-04-24  7:08                     ` Olaf Kirch
2007-04-24 15:10                       ` Steve Dickson
2007-04-24 16:10                       ` Christoph Hellwig
2007-04-24 17:04                         ` Steve Dickson
2007-04-24 17:17                           ` Christoph Hellwig
2007-04-24 17:52                             ` Steve Dickson
2007-04-24 19:09                               ` Peter Åstrand
2007-04-24 20:26                                 ` Steve Dickson
2007-04-24 20:36                                   ` Peter Staubach
2007-04-25 11:56                                     ` Olaf Kirch
2007-04-25 15:44                                       ` Peter Staubach
2007-04-25 20:14                                         ` Olaf Kirch
2007-04-26  6:32                                           ` Neil Brown
2007-04-26  8:59                                             ` Olaf Kirch
2007-04-26 13:03                                               ` Peter Staubach
2007-05-02  4:22                                                 ` Ian Kent
2007-04-27 15:07                                               ` Olaf Kirch
2007-04-27 15:18                                                 ` Christoph Hellwig
2007-04-27 17:07                                                   ` Olaf Kirch
2007-04-29 23:32                                                 ` Steve Dickson
2007-04-26  7:52                                     ` Aurélien Charbon
2007-04-25  8:57                                   ` Peter Åstrand
2007-04-25  8:56                               ` Olaf Kirch
2007-04-25  9:58                                 ` Christoph Hellwig
2007-04-25 13:22                                   ` Steve Dickson
2007-04-25 14:10                                     ` Olaf Kirch
2007-04-25 14:42                                       ` Christoph Hellwig
2007-04-26 14:30                                         ` Peter Åstrand
2007-04-25 14:37                                     ` Christoph Hellwig
2007-04-25 13:39                                 ` Steve Dickson
2007-04-26 22:22                                 ` Steve Dickson
2007-04-27  2:22                                   ` J. Bruce Fields
2007-04-27  6:20                                   ` Olaf Kirch
2007-04-27 14:01                                     ` Peter Staubach
2007-04-27 14:09                                       ` Christoph Hellwig
2007-04-27 14:21                                         ` Peter Staubach
2007-04-27 14:37                                           ` Christoph Hellwig
2007-04-29 23:39                                           ` Steve Dickson
2007-04-27 16:49                                       ` Olaf Kirch
2007-04-27 17:06                                         ` Peter Staubach [this message]
2007-04-27 17:04                                       ` Olaf Kirch
2007-04-27 17:34                                         ` Peter Staubach
2007-05-04 18:52                                     ` Steve Dickson
2007-04-24 14:38                     ` Steve Dickson
2007-04-19 15:15         ` Steve Dickson
2007-04-19 15:21           ` J. Bruce Fields
2007-04-19 15:42             ` Steve Dickson
2007-04-19 15:50               ` J. Bruce Fields
2007-04-19 16:36                 ` Steve Dickson
2007-04-19 22:50                   ` Anibal Monsalve Salazar

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=46322D9E.6070707@redhat.com \
    --to=staubach@redhat.com \
    --cc=SteveD@redhat.com \
    --cc=anibal@debian.org \
    --cc=hch@infradead.org \
    --cc=jfs@computer.org \
    --cc=mkoenig@novell.com \
    --cc=neilb@suse.de \
    --cc=nfs@lists.sourceforge.net \
    --cc=olaf.kirch@oracle.com \
    /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