rhomobile / rhodes

The Rhodes framework is a platform for building locally executing, device-optimized mobile applications for all major smartphone devices.
http://tau-platform.com/
MIT License
1.05k stars 237 forks source link

Crash on RhoConnect Sync with Android 30 #1060

Closed nhinze closed 2 years ago

nhinze commented 3 years ago

I'm using the latest android30 branch as of 11/12/2020. I have cleaned my builds.

The app crashes on RhoConnect sync.

You can see some fatal errors in the log below:

2020-11-12 16:20:44.757 6767-6902/com.cavalloapps.coursewalk2 E/libc: Access denied finding property "ro.serialno"

2020-11-12 16:20:46.465 6767-6803/com.cavalloapps.coursewalk2 A/libc: fdsan: attempted to close file descriptor 126, expected to be unowned, actually owned by unique_fd 0xbb736974
2020-11-12 16:20:46.505 6767-6803/com.cavalloapps.coursewalk2 A/libc: Fatal signal 6 (SIGABRT), code -6 (SI_TKILL) in tid 6803 (RenderThread), pid 6767 (pps.coursewalk2)

build.yml:

extensions:
  - json
  - rholang
  - audiocapture
  - mediacapture
  - mediaplayer
  - rhoconnect-client
  - fcm-push
capabilities:
  - gps
  - camera
  - network_state
  - vibrate
  - sdcard
  - hardware_acceleration
  - push
android:
  minSDK: 30
  targetSDK: 30
  android_title: 0
  manifest_template: "AndroidManifest.erb"
  abis:
    - arm
    - aarch64
2020-11-12 16:20:44.240 6767-6879/com.cavalloapps.coursewalk2 I/APP: I 11/12/2020 16:20:44:239 b8c121e0           HttpServer| Process URI: '/system/loadallsyncsources'
2020-11-12 16:20:44.305 6767-6902/com.cavalloapps.coursewalk2 I/APP: I 11/12/2020 16:20:44:304 b240d1e0          SSLImplJava| Creating TrustManager for system certificates
2020-11-12 16:20:44.306 6767-6902/com.cavalloapps.coursewalk2 I/APP: I 11/12/2020 16:20:44:306 b240d1e0          SSLImplJava| Loading all SSL certificates from config
2020-11-12 16:20:44.306 6767-6902/com.cavalloapps.coursewalk2 I/APP: I 11/12/2020 16:20:44:306 b240d1e0          SSLImplJava| SSL certificates loaded: 0
2020-11-12 16:20:44.307 6767-6902/com.cavalloapps.coursewalk2 I/APP: I 11/12/2020 16:20:44:306 b240d1e0          SSLImplJava| Creating TrustManager for custom certificates
2020-11-12 16:20:44.307 6767-6902/com.cavalloapps.coursewalk2 I/APP: I 11/12/2020 16:20:44:307 b240d1e0          SSLImplJava| clientSSLCertificate is 
2020-11-12 16:20:44.310 6767-6902/com.cavalloapps.coursewalk2 I/APP: I 11/12/2020 16:20:44:310 b240d1e0          SSLImplJava| Secure SSL factory initialization completed
2020-11-12 16:20:44.757 6767-6902/com.cavalloapps.coursewalk2 E/libc: Access denied finding property "ro.serialno"
2020-11-12 16:20:44.758 6767-6902/com.cavalloapps.coursewalk2 I/APP: I 11/12/2020 16:20:44:757 b240d1e0              PhoneId| Serial#: 
2020-11-12 16:20:44.752 6767-6767/com.cavalloapps.coursewalk2 W/Thread-7: type=1400 audit(0.0:135): avc: denied { read } for name="u:object_r:serialno_prop:s0" dev="tmpfs" ino=250 scontext=u:r:untrusted_app:s0:c158,c256,c512,c768 tcontext=u:object_r:serialno_prop:s0 tclass=file permissive=0 app=com.cavalloapps.coursewalk2
2020-11-12 16:20:44.774 6767-6913/com.cavalloapps.coursewalk2 I/APP: I 11/12/2020 16:20:44:773 b213f1e0                 Sync| Sync server changes source ID :6
2020-11-12 16:20:44.775 6767-6913/com.cavalloapps.coursewalk2 I/APP: I 11/12/2020 16:20:44:775 b213f1e0                 Sync| Pull changes from server. Url: https://sync.mydomain.com/app/v1/Drawing?p_size=2000&version=3
2020-11-12 16:20:44.778 6767-6913/com.cavalloapps.coursewalk2 I/APP: I 11/12/2020 16:20:44:778 b213f1e0                  Net| GET request (Pull): https://sync.mydomain.com/app/v1/Drawing?p_size=2000&version=3
2020-11-12 16:20:44.893 6767-6902/com.cavalloapps.coursewalk2 I/APP: I 11/12/2020 16:20:44:893 b240d1e0              PhoneId| ANDROID_ID: f753bc88801ef90d
2020-11-12 16:20:44.893 6767-6902/com.cavalloapps.coursewalk2 I/APP: W 11/12/2020 16:20:44:893 b240d1e0              PhoneId| Phone capability is disabled< cannot access telephony service for its device id.
2020-11-12 16:20:44.894 6767-6902/com.cavalloapps.coursewalk2 I/APP: I 11/12/2020 16:20:44:894 b240d1e0              PhoneId| Generated phone id: fec46b5b-af5e-3a2d-b14c-20cbea30e529
2020-11-12 16:20:44.905 6767-6902/com.cavalloapps.coursewalk2 I/APP: I 11/12/2020 16:20:44:905 b240d1e0       ClientRegister| getRegisterBody() BODY is: {"device_pin":"c5id7S_OIGE:APA91bGY6wIi9P_rXnAaakv24LFnC3sb1_SB7uyGfnw9cmlT6Dnu4wk82ZqZ6l8H1Afd1a4LS-ieyISAySd5OxugxKwIXb231T6uS2dvNJPE3QPYzVtV7JFOSiyRBLAPc-VlNFMgh6ZP","phone_id":"fec46b5b-af5e-3a2d-b14c-20cbea30e529","device_port":"100","device_type":"ANDROID","device_push_type":"fcm","device_app_id":"","device_app_version":"4.1.0.9"}
2020-11-12 16:20:44.906 6767-6902/com.cavalloapps.coursewalk2 I/APP: I 11/12/2020 16:20:44:905 b240d1e0                  Net| POST request (Pull): https://sync.mydomain.com/rc/v1/clients/490162294ae4bc51e49092e1071bdecd/register
2020-11-12 16:20:44.968 6767-6902/com.cavalloapps.coursewalk2 I/APP: I 11/12/2020 16:20:44:968 b240d1e0          SSLImplJava| SSL connect to sync.mydomain.com:443
2020-11-12 16:20:44.970 6767-6913/com.cavalloapps.coursewalk2 I/APP: I 11/12/2020 16:20:44:970 b213f1e0          SSLImplJava| SSL connect to sync.mydomain.com:443
2020-11-12 16:20:44.986 6767-6913/com.cavalloapps.coursewalk2 I/APP: I 11/12/2020 16:20:44:985 b213f1e0          SSLImplJava| Creating secure SSL factory
2020-11-12 16:20:44.987 6767-6902/com.cavalloapps.coursewalk2 I/APP: I 11/12/2020 16:20:44:987 b240d1e0          SSLImplJava| Creating secure SSL factory
2020-11-12 16:20:45.034 6767-6913/com.cavalloapps.coursewalk2 I/APP: I 11/12/2020 16:20:45:033 b213f1e0          SSLImplJava| Creating TrustManager for system certificates
2020-11-12 16:20:45.036 6767-6913/com.cavalloapps.coursewalk2 I/APP: I 11/12/2020 16:20:45:035 b213f1e0          SSLImplJava| Loading all SSL certificates from config
2020-11-12 16:20:45.037 6767-6913/com.cavalloapps.coursewalk2 I/APP: I 11/12/2020 16:20:45:036 b213f1e0          SSLImplJava| SSL certificates loaded: 0
2020-11-12 16:20:45.037 6767-6913/com.cavalloapps.coursewalk2 I/APP: I 11/12/2020 16:20:45:037 b213f1e0          SSLImplJava| Creating TrustManager for custom certificates
2020-11-12 16:20:45.038 6767-6913/com.cavalloapps.coursewalk2 I/APP: I 11/12/2020 16:20:45:038 b213f1e0          SSLImplJava| clientSSLCertificate is 
2020-11-12 16:20:45.042 6767-6913/com.cavalloapps.coursewalk2 I/APP: I 11/12/2020 16:20:45:042 b213f1e0          SSLImplJava| Secure SSL factory initialization completed
2020-11-12 16:20:45.060 6767-6902/com.cavalloapps.coursewalk2 I/APP: I 11/12/2020 16:20:45:060 b240d1e0          SSLImplJava| Creating TrustManager for system certificates
2020-11-12 16:20:45.061 6767-6902/com.cavalloapps.coursewalk2 I/APP: I 11/12/2020 16:20:45:061 b240d1e0          SSLImplJava| Loading all SSL certificates from config
2020-11-12 16:20:45.062 6767-6902/com.cavalloapps.coursewalk2 I/APP: I 11/12/2020 16:20:45:062 b240d1e0          SSLImplJava| SSL certificates loaded: 0
2020-11-12 16:20:45.062 6767-6902/com.cavalloapps.coursewalk2 I/APP: I 11/12/2020 16:20:45:062 b240d1e0          SSLImplJava| Creating TrustManager for custom certificates
2020-11-12 16:20:45.067 6767-6902/com.cavalloapps.coursewalk2 I/APP: I 11/12/2020 16:20:45:067 b240d1e0          SSLImplJava| clientSSLCertificate is 
2020-11-12 16:20:45.069 6767-6902/com.cavalloapps.coursewalk2 I/APP: I 11/12/2020 16:20:45:068 b240d1e0          SSLImplJava| Secure SSL factory initialization completed
2020-11-12 16:20:45.525 6767-6879/com.cavalloapps.coursewalk2 I/APP: I 11/12/2020 16:20:45:524 b8c121e0           HttpServer| Process URI: '/system/call_ruby_proc_callback'
2020-11-12 16:20:45.563 6767-6879/com.cavalloapps.coursewalk2 I/APP: I 11/12/2020 16:20:45:562 b8c121e0                  APP| Params: {"__rho_object"=>{"body"=>"0"}, "rho_callback"=>"1"}
2020-11-12 16:20:45.619 6767-6879/com.cavalloapps.coursewalk2 I/APP: I 11/12/2020 16:20:45:619 b8c121e0    RhodesApplication| Inside runwhen before return
2020-11-12 16:20:45.638 6767-6767/com.cavalloapps.coursewalk2 I/APP: I 11/12/2020 16:20:45:638 eef7b478       SimpleMainView| Cleared URL: javascript:var access_token = "e5bc80465db0405c2fed2e22acf449916cdad7f6645ef1bd25102c39979a1214";
2020-11-12 16:20:45.640 6767-6767/com.cavalloapps.coursewalk2 I/APP: I 11/12/2020 16:20:45:640 eef7b478     WebViewSingleton| onBeforeNavigate >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>javascript:var access_token = "e5bc80465db0405c2fed2e22acf449916cdad7f6645ef1bd25102c39979a1214";
2020-11-12 16:20:46.465 6767-6803/com.cavalloapps.coursewalk2 A/libc: fdsan: attempted to close file descriptor 126, expected to be unowned, actually owned by unique_fd 0xbb736974
2020-11-12 16:20:46.505 6767-6803/com.cavalloapps.coursewalk2 A/libc: Fatal signal 6 (SIGABRT), code -6 (SI_TKILL) in tid 6803 (RenderThread), pid 6767 (pps.coursewalk2)
2020-11-12 16:20:46.618 6767-6935/com.cavalloapps.coursewalk2 I/APP: I 11/12/2020 16:20:46:617 b107f1e0              Network| ThreadQueue blocked for 4294967295 seconds...
2020-11-12 16:20:46.636 6767-6902/com.cavalloapps.coursewalk2 I/APP: I 11/12/2020 16:20:46:636 b240d1e0       ClientRegister| Registered client sucessfully...
2020-11-12 16:20:46.637 6767-6902/com.cavalloapps.coursewalk2 I/APP: I 11/12/2020 16:20:46:637 b240d1e0       ClientRegister| Registered: 4
2020-11-12 16:20:46.638 6767-6902/com.cavalloapps.coursewalk2 I/APP: I 11/12/2020 16:20:46:637 b240d1e0       ClientRegister| ClientRegister thread shutdown
2020-11-12 16:20:46.651 6767-6913/com.cavalloapps.coursewalk2 I/APP: I 11/12/2020 16:20:46:650 b213f1e0                 Sync| Got 0(Processed: 0) records of 0 from server. Source: Drawing. Version: 3
2020-11-12 16:20:46.653 6767-6913/com.cavalloapps.coursewalk2 I/APP: I 11/12/2020 16:20:46:653 b213f1e0                 Sync| SyncSource: pass_through = false
2020-11-12 16:20:46.665 6767-6913/com.cavalloapps.coursewalk2 I/APP: I 11/12/2020 16:20:46:665 b213f1e0                 Sync| Fire notification. Source : Drawing; Url :; Params: 
2020-11-12 16:20:46.673 6767-6879/com.cavalloapps.coursewalk2 I/APP: I 11/12/2020 16:20:46:673 b8c121e0           HttpServer| Process URI: '/app/Sync/sync_notify'
2020-11-12 16:20:46.681 6767-6879/com.cavalloapps.coursewalk2 I/APP: I 11/12/2020 16:20:46:681 b8c121e0                  APP| RHO serve: /app/Sync/sync_notify
2020-11-12 16:20:46.690 6767-6879/com.cavalloapps.coursewalk2 I/APP: I 11/12/2020 16:20:46:689 b8c121e0                  APP| Params: {"__rho_object"=>{"__rho_inline"=>"0"}, "rho_callback"=>"1"}
2020-11-12 16:20:46.694 6767-6879/com.cavalloapps.coursewalk2 I/APP: I 11/12/2020 16:20:46:694 b8c121e0    RhodesApplication| Inside runwhen before return
2020-11-12 16:20:46.696 6767-6879/com.cavalloapps.coursewalk2 I/APP: I 11/12/2020 16:20:46:696 b8c121e0           HttpServer| GC Start.
2020-11-12 16:20:46.698 6767-6913/com.cavalloapps.coursewalk2 I/APP: I 11/12/2020 16:20:46:698 b213f1e0                 Sync| Clear notification. Source : Drawing
2020-11-12 16:20:46.717 6767-6913/com.cavalloapps.coursewalk2 I/APP: I 11/12/2020 16:20:46:717 b213f1e0                 Sync| Sync server changes source ID :5
2020-11-12 16:20:46.722 6767-6913/com.cavalloapps.coursewalk2 I/APP: I 11/12/2020 16:20:46:722 b213f1e0                 Sync| Pull changes from server. Url: https://sync.mydomain.com/app/v1/Logo?p_size=2000&version=3
2020-11-12 16:20:46.725 6767-6913/com.cavalloapps.coursewalk2 I/APP: I 11/12/2020 16:20:46:725 b213f1e0                  Net| GET request (Pull): https://sync.mydomain.com/app/v1/Logo?p_size=2000&version=3
2020-11-12 16:20:46.745 6767-6879/com.cavalloapps.coursewalk2 I/APP: I 11/12/2020 16:20:46:745 b8c121e0           HttpServer| GC End.
2020-11-12 16:20:46.761 6767-6913/com.cavalloapps.coursewalk2 I/APP: I 11/12/2020 16:20:46:761 b213f1e0          SSLImplJava| SSL connect to sync.mydomain.com:443
2020-11-12 16:20:46.762 6767-6913/com.cavalloapps.coursewalk2 I/APP: I 11/12/2020 16:20:46:762 b213f1e0          SSLImplJava| Creating secure SSL factory
2020-11-12 16:20:46.773 6767-6913/com.cavalloapps.coursewalk2 I/APP: I 11/12/2020 16:20:46:773 b213f1e0          SSLImplJava| Creating TrustManager for system certificates
2020-11-12 16:20:46.776 6767-6913/com.cavalloapps.coursewalk2 I/APP: I 11/12/2020 16:20:46:776 b213f1e0          SSLImplJava| Loading all SSL certificates from config
2020-11-12 16:20:46.776 6767-6913/com.cavalloapps.coursewalk2 I/APP: I 11/12/2020 16:20:46:776 b213f1e0          SSLImplJava| SSL certificates loaded: 0
2020-11-12 16:20:46.776 6767-6913/com.cavalloapps.coursewalk2 I/APP: I 11/12/2020 16:20:46:776 b213f1e0          SSLImplJava| Creating TrustManager for custom certificates
2020-11-12 16:20:46.777 6767-6913/com.cavalloapps.coursewalk2 I/APP: I 11/12/2020 16:20:46:777 b213f1e0          SSLImplJava| clientSSLCertificate is 
2020-11-12 16:20:46.781 6767-6913/com.cavalloapps.coursewalk2 I/APP: I 11/12/2020 16:20:46:781 b213f1e0          SSLImplJava| Secure SSL factory initialization completed
nhinze commented 3 years ago

I actually have two crashes involving RhoConnect.

First, a crash occurs when login to RhoConnect. This is the error log above. The problem is fixed by adding the READ_PHONE_STATE permission. However, this is undesired. The crash only happens on first login to RhoConnect on the initial install of the app.

Second, I have another crash that is happening if a "Rho::Network.get" is called during a RhoConnect Sync. The workaround is to not call any Rho::Network.get while syncing.

nhinze commented 3 years ago

The crash seems to happen at the end of a RhoConnect refresh when Curl_rhossl_shutdown is called. It crashes after this function is complete. That's the last debug message I get.

This may help: https://android.googlesource.com/platform/bionic/+/master/docs/fdsan.md

Also, it all works perfectly fine in the Android emulator with API 30. However, on device, with my Google Pixel 4a with Android 11 it crashes randomly after a RhoConnect sync.

I've also tried with the latest Rhodes 7.4-dev23.

alex-epifanoff commented 2 years ago

Try using latest stable release, 7.4.0