termux / proot

An chroot-like implementation using ptrace.
https://wiki.termux.com/wiki/PRoot
Other
775 stars 160 forks source link

`mprotect()` permission denied while using `flutter run` #231

Closed SaicharanKandukuri closed 1 year ago

SaicharanKandukuri commented 2 years ago

Problem description

mprotect() permission denied during flutter run in proot so I managed to start up flutter in my aarch64 Samsung device with termux/proot and when I finally tried to test flutter run in web mode it ended up with an mprotect() error

here is error out from flutter run

flutter run
   Woah! You appear to be trying to run flutter as root.
   We strongly recommend running the flutter tool without superuser privileges.
  /
📎
Downloading Web SDK...                                          ../../runtime/vm/virtual_memory_posix.cc: 557: error: mprotect error: 13 (Permission denied)
version=2.18.0-85.0.dev (dev) (Wed May 4 12:05:31 2022 -0700) on "linux_arm64"
pid=11461, thread=11547, isolate_group=main(0x3003035000), isolate=main(0x300793e000)
isolate_instructions=3001ef1d60, vm_instructions=3001ef1d60
  pc 0x00000030021120d4 fp 0x0000007d75a7b5c0 dart::Profiler::DumpStackTrace(void*)+0x80
-- End of DumpStackTrace
  pc 0x0000000000000000 fp 0x0000007d75a7cd70 sp 0x0000000000000000 [Stub] CallToRuntime
  pc 0x0000007d7b683d68 fp 0x0000007d75a7cdc0 sp 0x0000007d75a7cd80 [Stub] OneArgCheckInlineCache
  pc 0x0000007d760fecfc fp 0x0000007d75a7ce30 sp 0x0000007d75a7cdd0 [Unoptimized] NumberFormatParser.parseTrunkCharacter
  pc 0x0000007d760fcf40 fp 0x0000007d75a7cea0 sp 0x0000007d75a7ce40 [Unoptimized] NumberFormatParser._parseTrunk@446166373
  pc 0x0000007d760fac3c fp 0x0000007d75a7cef8 sp 0x0000007d75a7ceb0 [Unoptimized] NumberFormatParser._parse@446166373
  pc 0x0000007d760f81b4 fp 0x0000007d75a7cf38 sp 0x0000007d75a7cf08 [Unoptimized] NumberFormatParser.parse
  pc 0x0000007d760f75e0 fp 0x0000007d75a7d050 sp 0x0000007d75a7cf48 [Unoptimized] new NumberFormat._forPattern@222441731
  pc 0x0000007d760f6b50 fp 0x0000007d75a7d0c0 sp 0x0000007d75a7d060 [Unoptimized] new NumberFormat.
  pc 0x0000007d760f6830 fp 0x0000007d75a7d0f8 sp 0x0000007d75a7d0d0 [Unoptimized] init:kSecondsFormat
  pc 0x0000007d7b686700 fp 0x0000007d75a7d120 sp 0x0000007d75a7d108 [Stub] InitLateFinalStaticField
  pc 0x0000007d760f6778 fp 0x0000007d75a7d148 sp 0x0000007d75a7d130 [Unoptimized] get:kSecondsFormat
  pc 0x0000007d760f6104 fp 0x0000007d75a7d190 sp 0x0000007d75a7d158 [Unoptimized] getElapsedAsSeconds
  pc 0x0000007d760f5cc8 fp 0x0000007d75a7d1c8 sp 0x0000007d75a7d1a0 [Unoptimized] Status.get:elapsedTime
  pc 0x0000007d760f4db0 fp 0x0000007d75a7d208 sp 0x0000007d75a7d1d8 [Unoptimized] SpinnerStatus.stop
  pc 0x0000007d7632ea2c fp 0x0000007d75a7d280 sp 0x0000007d75a7d218 [Unoptimized] ArtifactUpdater._downloadArchive@30391902
  pc 0x0000007d760e88b0 fp 0x0000007d75a7d2d0 sp 0x0000007d75a7d290 [Optimized] _asyncThenWrapperHelper@4048458.thenWrapper
  pc 0x0000007d760e2af8 fp 0x0000007d75a7d360 sp 0x0000007d75a7d2e0 [Optimized] _rootRunUnary@4048458
  pc 0x0000007d760df0f0 fp 0x0000007d75a7d3b8 sp 0x0000007d75a7d370 [Optimized] _rootRunUnary@4048458
  pc 0x0000007d760e5998 fp 0x0000007d75a7d448 sp 0x0000007d75a7d3c8 [Optimized] _FutureListener@4048458.handleValue
  pc 0x0000007d760e9b14 fp 0x0000007d75a7d4c0 sp 0x0000007d75a7d458 [Optimized] _Future@4048458._propagateToListeners@4048458.handleValueCallback
  pc 0x0000007d760de3f8 fp 0x0000007d75a7d528 sp 0x0000007d75a7d4d0 [Optimized] _Future@4048458._propagateToListeners@4048458
  pc 0x0000007d760e9644 fp 0x0000007d75a7d568 sp 0x0000007d75a7d538 [Optimized] _completeWithNoFutureOnAsyncReturn@4048458
  pc 0x0000007d763497c4 fp 0x0000007d75a7d5e8 sp 0x0000007d75a7d578 [Unoptimized] ArtifactUpdater._download@30391902
  pc 0x0000007d760e88b0 fp 0x0000007d75a7d638 sp 0x0000007d75a7d5f8 [Optimized] _asyncThenWrapperHelper@4048458.thenWrapper
  pc 0x0000007d760e2af8 fp 0x0000007d75a7d6c8 sp 0x0000007d75a7d648 [Optimized] _rootRunUnary@4048458
  pc 0x0000007d760df0f0 fp 0x0000007d75a7d720 sp 0x0000007d75a7d6d8 [Optimized] _rootRunUnary@4048458
  pc 0x0000007d760e5998 fp 0x0000007d75a7d7b0 sp 0x0000007d75a7d730 [Optimized] _FutureListener@4048458.handleValue
  pc 0x0000007d760e9b14 fp 0x0000007d75a7d828 sp 0x0000007d75a7d7c0 [Optimized] _Future@4048458._propagateToListeners@4048458.handleValueCallback
  pc 0x0000007d760de3f8 fp 0x0000007d75a7d890 sp 0x0000007d75a7d838 [Optimized] _Future@4048458._propagateToListeners@4048458
  pc 0x0000007d7608d114 fp 0x0000007d75a7d8d8 sp 0x0000007d75a7d8a0 [Unoptimized] _Future@4048458._complete@4048458
  pc 0x0000007d760f22bc fp 0x0000007d75a7d940 sp 0x0000007d75a7d8e8 [Unoptimized] Stream.get:last.<anonymous closure>
  pc 0x0000007d760da7cc fp 0x0000007d75a7d9c8 sp 0x0000007d75a7d950 [Optimized] _rootRun@4048458
  pc 0x0000007d760dc17c fp 0x0000007d75a7da18 sp 0x0000007d75a7d9d8 [Optimized] _rootRun@4048458
  pc 0x0000007d760db028 fp 0x0000007d75a7dac8 sp 0x0000007d75a7da28 [Optimized] _CustomZone@4048458.runGuarded
  pc 0x0000007d76370a78 fp 0x0000007d75a7db08 sp 0x0000007d75a7dad8 [Unoptimized] _BufferingStreamSubscription@4048458._sendDone@4048458.sendDone
  pc 0x0000007d7636f090 fp 0x0000007d75a7db58 sp 0x0000007d75a7db18 [Unoptimized] _BufferingStreamSubscription@4048458._sendDone@4048458
  pc 0x0000007d7636ec78 fp 0x0000007d75a7db90 sp 0x0000007d75a7db68 [Unoptimized] _DelayedDone@4048458.perform
  pc 0x0000007d763696c8 fp 0x0000007d75a7dbe0 sp 0x0000007d75a7dba0 [Unoptimized] _StreamImplEvents@4048458.handleNext
  pc 0x0000007d76369378 fp 0x0000007d75a7dc28 sp 0x0000007d75a7dbf0 [Unoptimized] _PendingEvents@4048458.schedule.<anonymous closure>
  pc 0x0000007d760da7cc fp 0x0000007d75a7dcb0 sp 0x0000007d75a7dc38 [Optimized] _rootRun@4048458
  pc 0x0000007d760dc17c fp 0x0000007d75a7dd00 sp 0x0000007d75a7dcc0 [Optimized] _rootRun@4048458
  pc 0x0000007d760db028 fp 0x0000007d75a7ddb0 sp 0x0000007d75a7dd10 [Optimized] _CustomZone@4048458.runGuarded
  pc 0x0000007d760ddba0 fp 0x0000007d75a7dde8 sp 0x0000007d75a7ddc0 [Optimized] _CustomZone@4048458.bindCallbackGuarded.<anonymous closure>
  pc 0x0000007d760da770 fp 0x0000007d75a7de70 sp 0x0000007d75a7ddf8 [Optimized] _rootRun@4048458
  pc 0x0000007d760dc17c fp 0x0000007d75a7dec0 sp 0x0000007d75a7de80 [Optimized] _rootRun@4048458
  pc 0x0000007d760db028 fp 0x0000007d75a7df70 sp 0x0000007d75a7ded0 [Optimized] _CustomZone@4048458.runGuarded
  pc 0x0000007d760ddba0 fp 0x0000007d75a7dfa8 sp 0x0000007d75a7df80 [Optimized] _CustomZone@4048458.bindCallbackGuarded.<anonymous closure>
  pc 0x0000007d760e92a0 fp 0x0000007d75a7e010 sp 0x0000007d75a7dfb8 [Optimized] _startMicrotaskLoop@4048458
  pc 0x0000007d760e0374 fp 0x0000007d75a7e038 sp 0x0000007d75a7e020 [Optimized] _startMicrotaskLoop@4048458
  pc 0x0000007d760e6bfc fp 0x0000007d75a7e118 sp 0x0000007d75a7e048 [Optimized] _Timer@1026248._runTimers@1026248
  pc 0x0000007d760ebd34 fp 0x0000007d75a7e148 sp 0x0000007d75a7e128 [Optimized] _Timer@1026248._handleMessage@1026248
  pc 0x0000007d760ecf14 fp 0x0000007d75a7e220 sp 0x0000007d75a7e158 [Optimized] _Closure@0150898.dyn:call
  pc 0x0000007d760e40d8 fp 0x0000007d75a7e268 sp 0x0000007d75a7e230 [Optimized] _RawReceivePortImpl@1026248._handleMessage@1026248
  pc 0x0000007d7b682ed8 fp 0x0000007d75a7e340 sp 0x0000007d75a7e278 [Stub] InvokeDartCode
=== Crash occured when compiling package:intl/src/intl/number_format_parser.dart_NumberFormatParser_get_zeroDigitCount in unoptimized JIT mode in unkno>
=== Flow Graph not available
Aborted

I think proot verbose log is a bad idea when literally 100 of libs loaded it would be too much ( I will post those too if requested )

Steps to reproduce

I mentioned common things as pre-requisites

pre-requisites

Setting up flutter

this script takes care of it

apt update
apt install cmake meson axel tar unzip -y

axel https://storage.googleapis.com/flutter_infra_release/releases/stable/linux/flutter_linux_2.10.5-stable.tar.xz
tar -xvf flutter_linux_2.10.5-stable.tar.xz
rm -rf flutter/bin/cache/dark-sdk

axel https://storage.googleapis.com/dart-archive/channels/stable/release/2.16.2/sdk/dartsdk-linux-arm64-release.zip
unzip dartsdk-linux-arm64-release.zip
cp -rv dart-sdk flutter/bin/cache/dark-sdk

setting up chrome executable for flutter

for installing chromium use this ( to make things quick )

curl -L -o chromium.sh https://raw.githubusercontent.com/RandomCoderOrg/udroid-app-ports/main/chromium/install.sh
bash chromium.sh

this installs chromium and sets up a script chomium-nosandbox to make chromium run in root

now setting CHROME_EXECUTABLE to chomium-nosandbox make flutter work in root

export CHROME_EXECUTABLE=$(which chromium-nosandbox)

final steps

now running flutter run should pass all checks. also running flutter devices should show chromium at end ( or somewhere in output ). next is to create a flutter project and try to run it

flutter create someapp
cd someapp
flutter run

and it crashes ( I mean shows error msg ) right here

Expected behavior

it should've ran successfully with a chromium session running the flutter app

Additional information

Termux Variables:
TERMUX_API_VERSION=0.50.1+ba2836b
TERMUX_APK_RELEASE=GITHUB
TERMUX_APP_PID=22445
TERMUX_IS_DEBUGGABLE_BUILD=1
TERMUX_MAIN_PACKAGE_FORMAT=debian
TERMUX_VERSION=0.118.0+760ae78
Packages CPU architecture:
aarch64
Subscribed repositories:
# sources.list
deb https://packages-cf.termux.org/apt/termux-main/ stable main
# x11-repo (sources.list.d/x11.list)
deb https://packages.termux.org/apt/termux-x11 x11 main
Updatable packages:
All packages up to date
Android version:
12
Kernel build information:
Linux localhost 4.14.113-23944094 #1 SMP PREEMPT Fri Apr 1 19:47:13 KST 2022 aarch64 Android
Device manufacturer:
samsung
Device model:
SM-M315F

@michalbednarski

SaicharanKandukuri commented 2 years ago

Hmm! Seems like its working now after I started proot in verbose mode But I don't know why!

Screenshot_20220505-193910_TermuxWayland

And trace file is literally 265mb Screenshot_20220505-194339_My Files

SaicharanKandukuri commented 2 years ago

Update it failed again Screenshot_20220505-195746_TermuxWayland

hongde88 commented 2 years ago

@SaicharanKandukuri I was able to get vscode and flutter web up and running on my phone by adding -b /data/data/com.termux/files. If that doesn't work for you, another workaround to play with flutter web is to run flutter run -d web-server and open the url in chromium.

image image