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>
next prev parent 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).