All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jiri Pirko <jpirko@redhat.com>
To: Eric Dumazet <eric.dumazet@gmail.com>
Cc: netdev@vger.kernel.org, davem@davemloft.net, jbrouer@redhat.com,
	paulmck@linux.vnet.ibm.com, wfg@linux.intel.com
Subject: Re: [patch net-next 1/2] team: use rcu_access_pointer to access RCU pointer by writer
Date: Wed, 20 Jun 2012 20:33:59 +0200	[thread overview]
Message-ID: <20120620183359.GA1569@minipsycho> (raw)
In-Reply-To: <1340208104.4604.1247.camel@edumazet-glaptop>

Wed, Jun 20, 2012 at 06:01:44PM CEST, eric.dumazet@gmail.com wrote:
>On Wed, 2012-06-20 at 17:32 +0200, Jiri Pirko wrote:
>> Signed-off-by: Jiri Pirko <jpirko@redhat.com>
>> ---
>>  drivers/net/team/team_mode_activebackup.c |    7 +++++--
>>  drivers/net/team/team_mode_loadbalance.c  |    8 +++++---
>>  2 files changed, 10 insertions(+), 5 deletions(-)
>> 
>> diff --git a/drivers/net/team/team_mode_activebackup.c b/drivers/net/team/team_mode_activebackup.c
>> index 2fe02a8..c9e7621 100644
>> --- a/drivers/net/team/team_mode_activebackup.c
>> +++ b/drivers/net/team/team_mode_activebackup.c
>> @@ -61,8 +61,11 @@ static void ab_port_leave(struct team *team, struct team_port *port)
>>  
>>  static int ab_active_port_get(struct team *team, struct team_gsetter_ctx *ctx)
>>  {
>> -	if (ab_priv(team)->active_port)
>> -		ctx->data.u32_val = ab_priv(team)->active_port->dev->ifindex;
>> +	struct team_port *active_port;
>> +
>> +	active_port = rcu_access_pointer(ab_priv(team)->active_port);
>
>This is not the correct fix.
>
>You cant safely dereference active_port if you got it from
>rcu_access_pointer()

>
>You should use rcu_dereference() of rcu_dereference_protected() or
>rcu_dereference_bh() or similar variant, depending on the context.


Okay, reworking this using rcu_dereference_protected() since this is
update path.

>
>> +	if (active_port)
>> +		ctx->data.u32_val = active_port->dev->ifindex;
>>  	else
>>  		ctx->data.u32_val = 0;
>>  	return 0;
>> diff --git a/drivers/net/team/team_mode_loadbalance.c b/drivers/net/team/team_mode_loadbalance.c
>> index 45cc095..b4475a5 100644
>> --- a/drivers/net/team/team_mode_loadbalance.c
>> +++ b/drivers/net/team/team_mode_loadbalance.c
>> @@ -96,7 +96,7 @@ static void lb_tx_hash_to_port_mapping_null_port(struct team *team,
>>  		struct lb_port_mapping *pm;
>>  
>>  		pm = &lb_priv->ex->tx_hash_to_port_mapping[i];
>> -		if (pm->port == port) {
>> +		if (rcu_access_pointer(pm->port) == port) {
>
>This one is OK
>
>>  			rcu_assign_pointer(pm->port, NULL);
>
>I dont understand why you submit two patches...

Squashing into one now.

>
>>  			team_option_inst_set_change(pm->opt_inst_info);
>>  			changed = true;
>> @@ -292,7 +292,7 @@ static int lb_bpf_func_set(struct team *team, struct team_gsetter_ctx *ctx)
>>  	if (lb_priv->ex->orig_fprog) {
>>  		/* Clear old filter data */
>>  		__fprog_destroy(lb_priv->ex->orig_fprog);
>> -		sk_unattached_filter_destroy(lb_priv->fp);
>> +		sk_unattached_filter_destroy(rcu_access_pointer(lb_priv->fp));
>>  	}
>
>

  reply	other threads:[~2012-06-20 18:34 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-06-20 15:31 [patch net-next 0/2] team: two RCU fixups Jiri Pirko
2012-06-20 15:32 ` [patch net-next 1/2] team: use rcu_access_pointer to access RCU pointer by writer Jiri Pirko
2012-06-20 16:01   ` Eric Dumazet
2012-06-20 18:33     ` Jiri Pirko [this message]
2012-06-20 15:32 ` [patch net-next 2/2] team: use RCU_INIT_POINTER for NULL assignment of RCU pointer Jiri Pirko
2012-06-20 21:05 ` [patch net-next 0/2] team: two RCU fixups David Miller
2012-06-20 21:19   ` Eric Dumazet
2012-06-20 21:27     ` David Miller

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=20120620183359.GA1569@minipsycho \
    --to=jpirko@redhat.com \
    --cc=davem@davemloft.net \
    --cc=eric.dumazet@gmail.com \
    --cc=jbrouer@redhat.com \
    --cc=netdev@vger.kernel.org \
    --cc=paulmck@linux.vnet.ibm.com \
    --cc=wfg@linux.intel.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.