[Beignet] [PATCH] Backend: Fix double free of the cloned_module

Pan, Xiuli xiuli.pan at intel.com
Thu Jun 22 02:00:01 UTC 2017


OK, the chaos in llvmToGen is the root cause of this bug, refine that function may solve the  problem.

-----Original Message-----
From: Yang, Rong R 
Sent: Thursday, June 22, 2017 09:38
To: Pan, Xiuli <xiuli.pan at intel.com>; beignet at lists.freedesktop.org
Cc: Pan, Xiuli <xiuli.pan at intel.com>
Subject: RE: [Beignet] [PATCH] Backend: Fix double free of the cloned_module

Because llvmToGen accept the filename argument, so it need to create and delete module.
I think the module should not be deleted in llvmToGen, the caller decide to delete or not.
I will send another patch to refine it.

> -----Original Message-----
> From: Beignet [mailto:beignet-bounces at lists.freedesktop.org] On Behalf 
> Of Xiuli Pan
> Sent: Thursday, June 15, 2017 16:46
> To: beignet at lists.freedesktop.org
> Cc: Pan, Xiuli <xiuli.pan at intel.com>
> Subject: [Beignet] [PATCH] Backend: Fix double free of the 
> cloned_module
> 
> From: Pan Xiuli <xiuli.pan at intel.com>
> 
> In the llvmToGen function the module will be deleted, we only need to 
> delete the cloned_module when the first llvmToGen success.
> 
> Signed-off-by: Pan Xiuli <xiuli.pan at intel.com>
> ---
>  backend/src/backend/program.cpp | 8 +++++---
>  1 file changed, 5 insertions(+), 3 deletions(-)
> 
> diff --git a/backend/src/backend/program.cpp 
> b/backend/src/backend/program.cpp index 724058c..8fb33c4 100644
> --- a/backend/src/backend/program.cpp
> +++ b/backend/src/backend/program.cpp
> @@ -154,7 +154,12 @@ namespace gbe {
>          //suppose file exists and llvmToGen will not return false.
>          llvmToGen(*unit, fileName, module, 0, strictMath, 
> OCL_PROFILING_LOG, error);
>        }
> +    } else {
> +      if(cloned_module){
> +        delete (llvm::Module*) cloned_module;
> +      }
>      }
> +
>      if(unit->getValid()){
>        std::string error2;
>        if (this->buildFromUnit(*unit, error2)){ @@ -163,9 +168,6 @@ 
> namespace gbe {
>        error = error + error2;
>      }
>      delete unit;
> -    if(cloned_module){
> -      delete (llvm::Module*) cloned_module;
> -    }
>      return ret;
>    }
> 
> --
> 2.7.4
> 
> _______________________________________________
> Beignet mailing list
> Beignet at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/beignet


More information about the Beignet mailing list