[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