Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Segmentation fault in some control methods on x86_64 #50

Closed
Code-Hex opened this issue Sep 20, 2022 · 5 comments · Fixed by #74
Closed

Segmentation fault in some control methods on x86_64 #50

Code-Hex opened this issue Sep 20, 2022 · 5 comments · Fixed by #74

Comments

@Code-Hex
Copy link
Owner

Code-Hex commented Sep 20, 2022

This reintroduces code which was removed in 481c580.
The Block_copy/Block_release calls from this helper seem to be needed on my
x86_64 macOS11 machine. Without this, example/linux/virtualization segfaults
in startWithCompletionHandler.

This fixes this ASAN error:

=================================================================
==56003==ERROR: AddressSanitizer: requested allocation size 0x53cb4e83f8b48 (0x53cb4e83f9b48 after adjustments for alignment, red zones etc.) exceeds maximum supported size of 0x10000000000 (thread T6)
    #0 0x43f0400 in wrap_malloc+0xa0 (libclang_rt.asan_osx_dynamic.dylib:x86_64h+0x44400)
    #1 0x7fff205753ba in _Block_copy+0x5e (libsystem_blocks.dylib:x86_64+0x13ba)
    #2 0x7fff6f594307 in Base::BlockPtr<void (bool)> Base::BlockPtr<void (bool)>::from_callable<-[VZVirtualMachine startWithCompletionHandler:]::$_13>(-[VZVirtualMachine startWithCompletionHandler:]::$_13)::'lambda'(void*, bool)::__invoke(void*, bool)+0xb37 (Virtualization:x86_64+0x24307)
    #3 0x43ef5fa in __wrap_dispatch_async_block_invoke+0xca (libclang_rt.asan_osx_dynamic.dylib:x86_64h+0x435fa)
    #4 0x7fff20691622 in _dispatch_call_block_and_release+0xb (libdispatch.dylib:x86_64+0x2622)
    #5 0x7fff20692805 in _dispatch_client_callout+0x7 (libdispatch.dylib:x86_64+0x3805)
    #6 0x7fff206985e9 in _dispatch_lane_serial_drain+0x25d (libdispatch.dylib:x86_64+0x95e9)
    #7 0x7fff206990ac in _dispatch_lane_invoke+0x16d (libdispatch.dylib:x86_64+0xa0ac)
    #8 0x7fff206a2c0c in _dispatch_workloop_worker_thread+0x32a (libdispatch.dylib:x86_64+0x13c0c)
    #9 0x7fff2083945c in _pthread_wqthread+0x139 (libsystem_pthread.dylib:x86_64+0x345c)
    #10 0x7fff2083842e in start_wqthread+0xe (libsystem_pthread.dylib:x86_64+0x242e)

Post by @cfergeau #46

@cfergeau
Copy link
Contributor

I've updated https://github.com/cfergeau/vz/commits/asan with tests which can be used to test the suggested fix in that same branch.

@cfergeau
Copy link
Contributor

See #46 (comment) for CI changes reproducing this problem

cfergeau added a commit to cfergeau/vz that referenced this issue Sep 23, 2022
This reintroduces code which was removed in 481c580.
The Block_copy/Block_release calls from this helper seem to be needed on my
x86_64 macOS11 machine. Without this, example/linux/virtualization segfaults
in startWithCompletionHandler.

This fixes this ASAN error:
=================================================================
==56003==ERROR: AddressSanitizer: requested allocation size 0x53cb4e83f8b48 (0x53cb4e83f9b48 after adjustments for alignment, red zones etc.) exceeds maximum supported size of 0x10000000000 (thread T6)
    #0 0x43f0400 in wrap_malloc+0xa0 (libclang_rt.asan_osx_dynamic.dylib:x86_64h+0x44400)
    Code-Hex#1 0x7fff205753ba in _Block_copy+0x5e (libsystem_blocks.dylib:x86_64+0x13ba)
    Code-Hex#2 0x7fff6f594307 in Base::BlockPtr<void (bool)> Base::BlockPtr<void (bool)>::from_callable<-[VZVirtualMachine startWithCompletionHandler:]::$_13>(-[VZVirtualMachine startWithCompletionHandler:]::$_13)::'lambda'(void*, bool)::__invoke(void*, bool)+0xb37 (Virtualization:x86_64+0x24307)
    Code-Hex#3 0x43ef5fa in __wrap_dispatch_async_block_invoke+0xca (libclang_rt.asan_osx_dynamic.dylib:x86_64h+0x435fa)
    Code-Hex#4 0x7fff20691622 in _dispatch_call_block_and_release+0xb (libdispatch.dylib:x86_64+0x2622)
    Code-Hex#5 0x7fff20692805 in _dispatch_client_callout+0x7 (libdispatch.dylib:x86_64+0x3805)
    Code-Hex#6 0x7fff206985e9 in _dispatch_lane_serial_drain+0x25d (libdispatch.dylib:x86_64+0x95e9)
    Code-Hex#7 0x7fff206990ac in _dispatch_lane_invoke+0x16d (libdispatch.dylib:x86_64+0xa0ac)
    Code-Hex#8 0x7fff206a2c0c in _dispatch_workloop_worker_thread+0x32a (libdispatch.dylib:x86_64+0x13c0c)
    Code-Hex#9 0x7fff2083945c in _pthread_wqthread+0x139 (libsystem_pthread.dylib:x86_64+0x345c)
    Code-Hex#10 0x7fff2083842e in start_wqthread+0xe (libsystem_pthread.dylib:x86_64+0x242e)

This fixes Code-Hex#50
cfergeau added a commit to cfergeau/vz that referenced this issue Oct 10, 2022
This reintroduces code which was removed in 481c580.
The Block_copy/Block_release calls from this helper seem to be needed on my
x86_64 macOS11 machine. Without this, example/linux/virtualization segfaults
in startWithCompletionHandler.

This fixes this ASAN error:
=================================================================
==56003==ERROR: AddressSanitizer: requested allocation size 0x53cb4e83f8b48 (0x53cb4e83f9b48 after adjustments for alignment, red zones etc.) exceeds maximum supported size of 0x10000000000 (thread T6)
    #0 0x43f0400 in wrap_malloc+0xa0 (libclang_rt.asan_osx_dynamic.dylib:x86_64h+0x44400)
    Code-Hex#1 0x7fff205753ba in _Block_copy+0x5e (libsystem_blocks.dylib:x86_64+0x13ba)
    Code-Hex#2 0x7fff6f594307 in Base::BlockPtr<void (bool)> Base::BlockPtr<void (bool)>::from_callable<-[VZVirtualMachine startWithCompletionHandler:]::$_13>(-[VZVirtualMachine startWithCompletionHandler:]::$_13)::'lambda'(void*, bool)::__invoke(void*, bool)+0xb37 (Virtualization:x86_64+0x24307)
    Code-Hex#3 0x43ef5fa in __wrap_dispatch_async_block_invoke+0xca (libclang_rt.asan_osx_dynamic.dylib:x86_64h+0x435fa)
    Code-Hex#4 0x7fff20691622 in _dispatch_call_block_and_release+0xb (libdispatch.dylib:x86_64+0x2622)
    Code-Hex#5 0x7fff20692805 in _dispatch_client_callout+0x7 (libdispatch.dylib:x86_64+0x3805)
    Code-Hex#6 0x7fff206985e9 in _dispatch_lane_serial_drain+0x25d (libdispatch.dylib:x86_64+0x95e9)
    Code-Hex#7 0x7fff206990ac in _dispatch_lane_invoke+0x16d (libdispatch.dylib:x86_64+0xa0ac)
    Code-Hex#8 0x7fff206a2c0c in _dispatch_workloop_worker_thread+0x32a (libdispatch.dylib:x86_64+0x13c0c)
    Code-Hex#9 0x7fff2083945c in _pthread_wqthread+0x139 (libsystem_pthread.dylib:x86_64+0x345c)
    Code-Hex#10 0x7fff2083842e in start_wqthread+0xe (libsystem_pthread.dylib:x86_64+0x242e)

This fixes Code-Hex#50
cfergeau added a commit to cfergeau/vz that referenced this issue Oct 11, 2022
This reintroduces code which was removed in 481c580.
The Block_copy/Block_release calls from this helper seem to be needed on my
x86_64 macOS11 machine. Without this, example/linux/virtualization segfaults
in startWithCompletionHandler.

This fixes this ASAN error:
=================================================================
==56003==ERROR: AddressSanitizer: requested allocation size 0x53cb4e83f8b48 (0x53cb4e83f9b48 after adjustments for alignment, red zones etc.) exceeds maximum supported size of 0x10000000000 (thread T6)
    #0 0x43f0400 in wrap_malloc+0xa0 (libclang_rt.asan_osx_dynamic.dylib:x86_64h+0x44400)
    Code-Hex#1 0x7fff205753ba in _Block_copy+0x5e (libsystem_blocks.dylib:x86_64+0x13ba)
    Code-Hex#2 0x7fff6f594307 in Base::BlockPtr<void (bool)> Base::BlockPtr<void (bool)>::from_callable<-[VZVirtualMachine startWithCompletionHandler:]::$_13>(-[VZVirtualMachine startWithCompletionHandler:]::$_13)::'lambda'(void*, bool)::__invoke(void*, bool)+0xb37 (Virtualization:x86_64+0x24307)
    Code-Hex#3 0x43ef5fa in __wrap_dispatch_async_block_invoke+0xca (libclang_rt.asan_osx_dynamic.dylib:x86_64h+0x435fa)
    Code-Hex#4 0x7fff20691622 in _dispatch_call_block_and_release+0xb (libdispatch.dylib:x86_64+0x2622)
    Code-Hex#5 0x7fff20692805 in _dispatch_client_callout+0x7 (libdispatch.dylib:x86_64+0x3805)
    Code-Hex#6 0x7fff206985e9 in _dispatch_lane_serial_drain+0x25d (libdispatch.dylib:x86_64+0x95e9)
    Code-Hex#7 0x7fff206990ac in _dispatch_lane_invoke+0x16d (libdispatch.dylib:x86_64+0xa0ac)
    Code-Hex#8 0x7fff206a2c0c in _dispatch_workloop_worker_thread+0x32a (libdispatch.dylib:x86_64+0x13c0c)
    Code-Hex#9 0x7fff2083945c in _pthread_wqthread+0x139 (libsystem_pthread.dylib:x86_64+0x345c)
    Code-Hex#10 0x7fff2083842e in start_wqthread+0xe (libsystem_pthread.dylib:x86_64+0x242e)

This fixes Code-Hex#50
cfergeau added a commit to cfergeau/vz that referenced this issue Oct 11, 2022
This reintroduces code which was removed in 481c580.
The Block_copy/Block_release calls from this helper seem to be needed on my
x86_64 macOS11 machine. Without this, example/linux/virtualization segfaults
in startWithCompletionHandler.

This fixes this ASAN error:
=================================================================
==56003==ERROR: AddressSanitizer: requested allocation size 0x53cb4e83f8b48 (0x53cb4e83f9b48 after adjustments for alignment, red zones etc.) exceeds maximum supported size of 0x10000000000 (thread T6)
    #0 0x43f0400 in wrap_malloc+0xa0 (libclang_rt.asan_osx_dynamic.dylib:x86_64h+0x44400)
    Code-Hex#1 0x7fff205753ba in _Block_copy+0x5e (libsystem_blocks.dylib:x86_64+0x13ba)
    Code-Hex#2 0x7fff6f594307 in Base::BlockPtr<void (bool)> Base::BlockPtr<void (bool)>::from_callable<-[VZVirtualMachine startWithCompletionHandler:]::$_13>(-[VZVirtualMachine startWithCompletionHandler:]::$_13)::'lambda'(void*, bool)::__invoke(void*, bool)+0xb37 (Virtualization:x86_64+0x24307)
    Code-Hex#3 0x43ef5fa in __wrap_dispatch_async_block_invoke+0xca (libclang_rt.asan_osx_dynamic.dylib:x86_64h+0x435fa)
    Code-Hex#4 0x7fff20691622 in _dispatch_call_block_and_release+0xb (libdispatch.dylib:x86_64+0x2622)
    Code-Hex#5 0x7fff20692805 in _dispatch_client_callout+0x7 (libdispatch.dylib:x86_64+0x3805)
    Code-Hex#6 0x7fff206985e9 in _dispatch_lane_serial_drain+0x25d (libdispatch.dylib:x86_64+0x95e9)
    Code-Hex#7 0x7fff206990ac in _dispatch_lane_invoke+0x16d (libdispatch.dylib:x86_64+0xa0ac)
    Code-Hex#8 0x7fff206a2c0c in _dispatch_workloop_worker_thread+0x32a (libdispatch.dylib:x86_64+0x13c0c)
    Code-Hex#9 0x7fff2083945c in _pthread_wqthread+0x139 (libsystem_pthread.dylib:x86_64+0x345c)
    Code-Hex#10 0x7fff2083842e in start_wqthread+0xe (libsystem_pthread.dylib:x86_64+0x242e)

This fixes Code-Hex#50
@Code-Hex
Copy link
Owner Author

Code-Hex commented Oct 13, 2022

I tried on this branch master...issue-50
However, It's not reproduced now. (But I need o fix a few other points. I will fix it by adding tests #69) So I close this issue.


I have carefully observed the logs here (you reported). I made sure that the trace always contains getUUID. Perhaps #47 has been resolved at the root cause.

https://github.com/cfergeau/vz/actions/runs/3089765099/jobs/4997751402

cfergeau added a commit to cfergeau/vz that referenced this issue Oct 13, 2022
cfergeau pushed a commit to cfergeau/vz that referenced this issue Oct 13, 2022
cfergeau added a commit to cfergeau/vz that referenced this issue Oct 13, 2022
@cfergeau
Copy link
Contributor

I tried on this branch master...issue-50
However, It's not reproduced now.

I managed to reproduce with current master: https://github.com/cfergeau/vz/actions/runs/3244632281
Changes on top of your issue-50 branch are:

diff --git a/.github/workflows/compile.yml b/.github/workflows/compile.yml
index 5bf85ac..e9b6524 100644
--- a/.github/workflows/compile.yml
+++ b/.github/workflows/compile.yml
@@ -25,6 +25,7 @@ jobs:
       fail-fast: false
       matrix:
         os:
+        - macOS-11
         - macOS-12
         go:
         - 1.17
diff --git a/Makefile b/Makefile
index 94d8f6c..ac214d0 100644
--- a/Makefile
+++ b/Makefile
@@ -4,4 +4,4 @@ fmt:
 
 .PHONY: test
 test:
-       CGO_CFLAGS="-fsanitize=address" CGO_LDFLAGS="-fsanitize=address" CGO_ENABLED=1 go test -exec "go run $(PWD)/cmd/codesign" -count=1 ./...
+       CGO_ENABLED=1 go test -exec "go run $(PWD)/cmd/codesign" -count=1 ./...
diff --git a/check_test.go b/check_test.go
index 2bc6fd2..78385e4 100644
--- a/check_test.go
+++ b/check_test.go
@@ -36,6 +36,8 @@ func TestVM(t *testing.T) {
                t.Fatal("cannot start")
        }
        m.Start(func(err error) {
-               t.Error(err)
+               if err == nil {
+                       t.Fatal("Start() did not return an error")
+               }
        })
 }

I can no longer reproduce with asan enabled, which is odd. Maybe this is caused by some memory corruption.

@Code-Hex Code-Hex reopened this Oct 14, 2022
@Code-Hex Code-Hex mentioned this issue Oct 14, 2022
@Code-Hex
Copy link
Owner Author

Code-Hex commented Oct 14, 2022

I tried to cherry-pick your this commit. but the commit does not exist now.

So I created again as a new PR for this fix. thanks for your report!

#74

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants