DPDK patches and discussions
 help / color / mirror / Atom feed
From: "Burakov, Anatoly" <anatoly.burakov@intel.com>
To: Mauricio Vasquez B <mauricio.vasquezbernal@studenti.polito.it>
Cc: "dev@dpdk.org" <dev@dpdk.org>
Subject: Re: [dpdk-dev] [PATCH v2] ivshmem: fix race condition
Date: Fri, 1 Apr 2016 11:30:55 +0000	[thread overview]
Message-ID: <C6ECDF3AB251BE4894318F4E45123697820D9987@IRSMSX109.ger.corp.intel.com> (raw)
In-Reply-To: <1459509732-22664-1-git-send-email-mauricio.vasquezbernal@studenti.polito.it>

> The memory zone could be freed just after adding it to the metadata
> file and just before marking it as not freeable.
> This patch changes the locking logic in order to prevent it.
> 
> Fixes: cd10c42eb5bc ("mem: fix ivshmem freeing")
> 
> Signed-off-by: Mauricio Vasquez B
> <mauricio.vasquezbernal@studenti.polito.it>
> ---
>  lib/librte_ivshmem/rte_ivshmem.c | 22 +++++++++++++---------
>  1 file changed, 13 insertions(+), 9 deletions(-)
> 
> diff --git a/lib/librte_ivshmem/rte_ivshmem.c
> b/lib/librte_ivshmem/rte_ivshmem.c
> index 8fc4b57..013c3eb 100644
> --- a/lib/librte_ivshmem/rte_ivshmem.c
> +++ b/lib/librte_ivshmem/rte_ivshmem.c
> @@ -471,10 +471,21 @@ add_memzone_to_metadata(const struct
> rte_memzone * mz,
>  		struct ivshmem_config * config)
>  {
>  	struct rte_ivshmem_metadata_entry * entry;
> -	unsigned i;
> +	unsigned i, idx;
> +	struct rte_mem_config *mcfg;
> +
> +	if(mz->len == 0) {
> +		RTE_LOG(ERR, EAL, "Trying to add an empty memzone\n");
> +		return -1;
> +	}
> 
>  	rte_spinlock_lock(&config->sl);
> 
> +	mcfg = rte_eal_get_configuration()->mem_config;
> +
> +	/* it prevents the memzone being freed while we add it to the
> metadata */
> +	rte_rwlock_write_lock(&mcfg->mlock);
> +
>  	/* find free slot in this config */
>  	for (i = 0; i < RTE_DIM(config->metadata->entry); i++) {
>  		entry = &config->metadata->entry[i];
> @@ -504,13 +515,6 @@ add_memzone_to_metadata(const struct
> rte_memzone * mz,
>  				config->metadata->name);
>  		goto fail;
>  	}
> -#ifdef RTE_LIBRTE_IVSHMEM
> -	struct rte_mem_config *mcfg;
> -	unsigned int idx;
> -
> -	mcfg = rte_eal_get_configuration()->mem_config;
> -
> -	rte_rwlock_write_lock(&mcfg->mlock);
> 
>  	idx = ((uintptr_t)mz - (uintptr_t)mcfg->memzone);
>  	idx = idx / sizeof(struct rte_memzone);
> @@ -519,10 +523,10 @@ add_memzone_to_metadata(const struct
> rte_memzone * mz,
>  	mcfg->memzone[idx].ioremap_addr = mz->phys_addr;
> 
>  	rte_rwlock_write_unlock(&mcfg->mlock);
> -#endif
>  	rte_spinlock_unlock(&config->sl);
>  	return 0;
>  fail:
> +	rte_rwlock_write_unlock(&mcfg->mlock);
>  	rte_spinlock_unlock(&config->sl);
>  	return -1;
>  }
> --
> 1.9.1

Acked-by: Anatoly  Burakov <anatoly.burakov@intel.com>

  reply	other threads:[~2016-04-01 11:31 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-04-01  8:16 [dpdk-dev] [PATCH] " Mauricio Vasquez B
2016-04-01  9:01 ` Burakov, Anatoly
2016-04-01 11:17   ` Mauricio Vásquez
2016-04-01 11:22 ` [dpdk-dev] [PATCH v2] " Mauricio Vasquez B
2016-04-01 11:30   ` Burakov, Anatoly [this message]
2016-04-01 13:35     ` Thomas Monjalon

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=C6ECDF3AB251BE4894318F4E45123697820D9987@IRSMSX109.ger.corp.intel.com \
    --to=anatoly.burakov@intel.com \
    --cc=dev@dpdk.org \
    --cc=mauricio.vasquezbernal@studenti.polito.it \
    /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).