[exec] Avoid destroying launchpad structure when already freed by launchpad_go
ZX-1174 #done
ZX-1220 #done
Change-Id: Icba5f620923568d8a88aa20cb52c2f21f91aacea
diff --git a/src/os/exec_fuchsia_cgo.go b/src/os/exec_fuchsia_cgo.go
index e10590d..25b446c 100644
--- a/src/os/exec_fuchsia_cgo.go
+++ b/src/os/exec_fuchsia_cgo.go
@@ -158,7 +158,11 @@
if status != zx.ErrOk {
return 0, errors.New("launchpad_create")
}
- defer C.launchpad_destroy(lp)
+ defer func() {
+ if lp != nil {
+ C.launchpad_destroy(lp)
+ }
+ }()
status = zx.Status(C.launchpad_load_from_file(lp, nameC))
if status != zx.ErrOk {
return 0, errors.New("loading vdso")
@@ -193,6 +197,8 @@
}
h := C.zx_handle_t(0)
status = zx.Status(C.launchpad_go(lp, &h, nil))
+ // lp is freed by launchpad_go unconditionally
+ lp = nil
if status < 0 {
return 0, errors.New("launchpad error")
}