All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ding Tianhong <dingtianhong@huawei.com>
To: Veaceslav Falico <vfalico@redhat.com>, <netdev@vger.kernel.org>
Cc: Jay Vosburgh <fubar@us.ibm.com>, Andy Gospodarek <andy@greyhouse.net>
Subject: Re: [PATCH v2 net-next 1/3] bonding: fix bond_3ad_set_carrier() RCU usage
Date: Thu, 9 Jan 2014 19:39:38 +0800	[thread overview]
Message-ID: <52CE8A7A.3090400@huawei.com> (raw)
In-Reply-To: <1389266425-28365-2-git-send-email-vfalico@redhat.com>

On 2014/1/9 19:20, Veaceslav Falico wrote:
> Currently, its usage is just plainly wrong. It first gets a slave under
> RCU, and, after releasing the RCU lock, continues to use it - whilst it can
> be freed.
> 
> Fix this by ensuring that bond_3ad_set_carrier() is either under RCU read
> lock or under the RTNL lock (bond_set_carrier() always holds it).
> 
> Fixes: be79bd048ab ("bonding: add RCU for bond_3ad_state_machine_handler()")
> CC: dingtianhong@huawei.com
> CC: Jay Vosburgh <fubar@us.ibm.com>
> CC: Andy Gospodarek <andy@greyhouse.net>
> Signed-off-by: Veaceslav Falico <vfalico@redhat.com>
> ---
> 
> Notes:
>     v1 -> v2:
>     Don't use _rcu primitives as we can be called under RTNL too.
> 
>  drivers/net/bonding/bond_3ad.c | 9 ++++-----
>  1 file changed, 4 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/net/bonding/bond_3ad.c b/drivers/net/bonding/bond_3ad.c
> index 29db1ca..cf5fab8 100644
> --- a/drivers/net/bonding/bond_3ad.c
> +++ b/drivers/net/bonding/bond_3ad.c
> @@ -1597,9 +1597,9 @@ static void ad_agg_selection_logic(struct aggregator *agg)
>  		}
>  	}
>  
> -	rcu_read_unlock();
> -
>  	bond_3ad_set_carrier(bond);
> +
> +	rcu_read_unlock();
>  }
>  
>  /**
> @@ -2322,15 +2322,14 @@ void bond_3ad_handle_link_change(struct slave *slave, char link)
>   *
>   * Called by bond_set_carrier(). Return zero if carrier state does not
>   * change, nonzero if it does.
> + * The caller must hold RCU read lock or RTNL.
>   */
>  int bond_3ad_set_carrier(struct bonding *bond)
>  {
>  	struct aggregator *active;
>  	struct slave *first_slave;
>  
> -	rcu_read_lock();
> -	first_slave = bond_first_slave_rcu(bond);
> -	rcu_read_unlock();
> +	first_slave = bond_first_slave(bond);
>  	if (!first_slave)
>  		return 0;
>  	active = __get_active_agg(&(SLAVE_AD_INFO(first_slave).aggregator));
> 

Agree, thanks.

Acked-by: Ding Tianhong <dingtianhong@huawei.com>

  reply	other threads:[~2014-01-09 11:39 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-01-09 11:20 [PATCH v2 net-next 0/3] bonding: fix bond_3ad RCU usage Veaceslav Falico
2014-01-09 11:20 ` [PATCH v2 net-next 1/3] bonding: fix bond_3ad_set_carrier() " Veaceslav Falico
2014-01-09 11:39   ` Ding Tianhong [this message]
2014-01-09 11:20 ` [PATCH v2 net-next 2/3] bonding: fix __get_first_agg " Veaceslav Falico
2014-01-09 11:58   ` Ding Tianhong
2014-01-09 11:58     ` Veaceslav Falico
2014-01-09 11:20 ` [PATCH v2 net-next 3/3] bonding: fix __get_active_agg() RCU logic Veaceslav Falico
2014-01-09 12:04   ` Ding Tianhong
2014-01-09 12:13     ` Veaceslav Falico

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=52CE8A7A.3090400@huawei.com \
    --to=dingtianhong@huawei.com \
    --cc=andy@greyhouse.net \
    --cc=fubar@us.ibm.com \
    --cc=netdev@vger.kernel.org \
    --cc=vfalico@redhat.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.