mem: fix incorrect munmap in error unwind

Message ID 20200106205553.3696-1-stephen@networkplumber.org (mailing list archive)
State Superseded, archived
Delegated to: David Marchand
Headers
Series mem: fix incorrect munmap in error unwind |

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/iol-intel-Performance fail Performance Testing issues
ci/iol-testing success Testing PASS
ci/travis-robot warning Travis build: failed
ci/iol-nxp-Performance success Performance Testing PASS
ci/iol-mellanox-Performance success Performance Testing PASS
ci/Intel-compilation success Compilation OK

Commit Message

Stephen Hemminger Jan. 6, 2020, 8:55 p.m. UTC
  The loop to unwind existing mmaps was only unmapping the
first segment.

Also, remove obvious redundant assignment.

Fixes: 66cc45e293ed ("mem: replace memseg with memseg lists")
Cc: anatoly.burakov@intel.com
Cc: stable@dpdk.org
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
 lib/librte_eal/linux/eal/eal_memory.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)
  

Comments

David Marchand Jan. 7, 2020, 8:43 a.m. UTC | #1
On Mon, Jan 6, 2020 at 9:56 PM Stephen Hemminger
<stephen@networkplumber.org> wrote:
>
> The loop to unwind existing mmaps was only unmapping the
> first segment.
>
> Also, remove obvious redundant assignment.
>
> Fixes: 66cc45e293ed ("mem: replace memseg with memseg lists")
> Cc: anatoly.burakov@intel.com
> Cc: stable@dpdk.org
> Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
> ---
>  lib/librte_eal/linux/eal/eal_memory.c | 3 +--
>  1 file changed, 1 insertion(+), 2 deletions(-)
>
> diff --git a/lib/librte_eal/linux/eal/eal_memory.c b/lib/librte_eal/linux/eal/eal_memory.c
> index 43e4ffc757bd..cf5b2433614b 100644
> --- a/lib/librte_eal/linux/eal/eal_memory.c
> +++ b/lib/librte_eal/linux/eal/eal_memory.c
> @@ -1967,9 +1967,8 @@ eal_legacy_hugepage_attach(void)
>         close(fd);
>  error:
>         /* map all segments into memory to make sure we get the addrs */

This looks like a copy of the same loop from a few lines before in the
same function.
The comment can be removed.


> -       cur_seg = 0;
>         for (cur_seg = 0; cur_seg < i; cur_seg++) {
> -               struct hugepage_file *hf = &hp[i];
> +               struct hugepage_file *hf = &hp[cur_seg];
>                 size_t map_sz = hf->size;
>                 void *map_addr = hf->final_va;
>

map_addr and map_sz are unnecessary.

We should be safe with dereferencing hp if i != 0, but still how about:

error:
        if (hp != NULL && hp != MAP_FAILED) {
                unsigned int cur_seg;

                for (cur_seg = 0; cur_seg < i; cur_seg++)
                        munmap(hp[cur_seg].final_va, hp[cur_seg].size);
                munmap(hp, size);
        }
        if (fd_hugepage >= 0)
                close(fd_hugepage);
        return -1;
  
Burakov, Anatoly Jan. 7, 2020, 4:15 p.m. UTC | #2
On 06-Jan-20 8:55 PM, Stephen Hemminger wrote:
> The loop to unwind existing mmaps was only unmapping the
> first segment.
> 
> Also, remove obvious redundant assignment.
> 
> Fixes: 66cc45e293ed ("mem: replace memseg with memseg lists")
> Cc: anatoly.burakov@intel.com
> Cc: stable@dpdk.org
> Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
> ---

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

Patch

diff --git a/lib/librte_eal/linux/eal/eal_memory.c b/lib/librte_eal/linux/eal/eal_memory.c
index 43e4ffc757bd..cf5b2433614b 100644
--- a/lib/librte_eal/linux/eal/eal_memory.c
+++ b/lib/librte_eal/linux/eal/eal_memory.c
@@ -1967,9 +1967,8 @@  eal_legacy_hugepage_attach(void)
 	close(fd);
 error:
 	/* map all segments into memory to make sure we get the addrs */
-	cur_seg = 0;
 	for (cur_seg = 0; cur_seg < i; cur_seg++) {
-		struct hugepage_file *hf = &hp[i];
+		struct hugepage_file *hf = &hp[cur_seg];
 		size_t map_sz = hf->size;
 		void *map_addr = hf->final_va;