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

Crash with permission error at method getPackagesForUid (Android 12) #902

Open
Iey4iej3 opened this issue Aug 12, 2022 · 6 comments
Open

Comments

@Iey4iej3
Copy link

Iey4iej3 commented Aug 12, 2022

BBS 3.0
LOS 19.1 (Android 12)

When I click "partial wakelocks" (including the "raw statistics"), BBS crashes, with log

AndroidRuntime
FATAL EXCEPTION: main
Process: com.asksven.betterbatterystats, PID: 19068
java.lang.SecurityException: getPackagesForUid: UID 10290 requires android.permission.INTERACT_ACROSS_USERS_FULL or android.permission.INTERACT_ACROSS_USERS or android.permission.INTERACT_ACROSS_PROFILES to access user .
	at android.os.Parcel.createExceptionOrNull(Parcel.java:2426)
	at android.os.Parcel.createException(Parcel.java:2410)
	at android.os.Parcel.readException(Parcel.java:2393)
	at android.os.Parcel.readException(Parcel.java:2335)
	at android.content.pm.IPackageManager$Stub$Proxy.getPackagesForUid(IPackageManager.java:5389)
	at android.app.ApplicationPackageManager$3.recompute(ApplicationPackageManager.java:1013)
	at android.app.ApplicationPackageManager$3.recompute(ApplicationPackageManager.java:1007)
	at android.app.PropertyInvalidatedCache.query(PropertyInvalidatedCache.java:562)
	at android.app.ApplicationPackageManager.getPackagesForUid(ApplicationPackageManager.java:1026)
	at com.asksven.android.common.nameutils.UidNameResolver.getNameForUid(UidNameResolver.java:107)
	at com.asksven.android.common.privateapiproxies.StatElement.getFullQualifiedName(StatElement.java:88)
	at com.asksven.android.common.privateapiproxies.StatElement.getFqn(StatElement.java:112)
	at com.asksven.betterbatterystats.adapters.StatsAdapter.getView(StatsAdapter.java:231)
	at android.widget.AbsListView.obtainView(AbsListView.java:2398)
	at android.widget.ListView.makeAndAddView(ListView.java:2067)
	at android.widget.ListView.fillDown(ListView.java:793)
	at android.widget.ListView.fillFromTop(ListView.java:855)
	at android.widget.ListView.layoutChildren(ListView.java:1838)
	at android.widget.AbsListView.onLayout(AbsListView.java:2195)
	at android.view.View.layout(View.java:23203)
	at android.view.ViewGroup.layout(ViewGroup.java:6412)
	at androidx.swiperefreshlayout.widget.SwipeRefreshLayout.onLayout(SwipeRefreshLayout.java:689)
	at android.view.View.layout(View.java:23203)
	at android.view.ViewGroup.layout(ViewGroup.java:6412)
	at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1829)
	at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1673)
	at android.widget.LinearLayout.onLayout(LinearLayout.java:1582)
	at android.view.View.layout(View.java:23203)
	at android.view.ViewGroup.layout(ViewGroup.java:6412)
	at android.widget.FrameLayout.layoutChildren(FrameLayout.java:332)
	at android.widget.FrameLayout.onLayout(FrameLayout.java:270)
	at android.view.View.layout(View.java:23203)
	at android.view.ViewGroup.layout(ViewGroup.java:6412)
	at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1829)
	at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1673)
	at android.widget.LinearLayout.onLayout(LinearLayout.java:1582)
	at android.view.View.layout(View.java:23203)
	at android.view.ViewGroup.layout(ViewGroup.java:6412)
	at android.widget.FrameLayout.layoutChildren(FrameLayout.java:332)
	at android.widget.FrameLayout.onLayout(FrameLayout.java:270)
	at android.view.View.layout(View.java:23203)
	at android.view.ViewGroup.layout(ViewGroup.java:6412)
	at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1829)
	at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1673)
	at android.widget.LinearLayout.onLayout(LinearLayout.java:1582)
	at android.view.View.layout(View.java:23203)
	at android.view.ViewGroup.layout(ViewGroup.java:6412)
	at android.widget.FrameLayout.layoutChildren(FrameLayout.java:332)
	at android.widget.FrameLayout.onLayout(FrameLayout.java:270)
	at com.android.internal.policy.DecorView.onLayout(DecorView.java:797)
	at android.view.View.layout(View.java:23203)
	at android.view.ViewGroup.layout(ViewGroup.java:6412)
	at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:3755)
	at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:3205)
	at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:2179)
	at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:8793)

The debug info contains sensitive info, but there are Result [wakelock ... which ends up with Wakelock [m_wakeType=0, m_name=androidx.core:wake:com.google.android.gms/or which seems incomplete.

Surrounding logs, maybe useful:

sh
type=1400 audit(0.0:22191): avc: denied { read } for name="/" dev="dm-0" ino=2 scontext=u:r:untrusted_app:s0:c34,c257,c512,c768 tcontext=u:object_r:rootfs:s0 tclass=dir permissive=0 app=com.asksven.betterterbatterystats

terbatterystat
Long monitor contention with owner AsyncTask #4 (19491) at com.asksven.betterbatterystats.data.Reference com.asksven.betterbatterystats.data.StatsProvider.populateReference(int, com.asksven.betterbatterystats.data.Reference)(StatsProvider.java:2762) waiters=0 in com.asksven.betterbatterystats.data.Reference com.asksven.betterbatterystats.data.StatsProvider.populateReference(int, com.asksven.betterbatterystats.data.Reference) for 322ms

StatsProvider
Exception: java.lang.SecurityException: getPackagesForUid: UID 10290 requires android.permission.INTERACT_ACROSS_USERS_FULL or android.permission.INTERACT_ACROSS_USERS or android.permission.INTERACT_ACROSS_PROFILES to access user .
	at android.os.Parcel.createExceptionOrNull(Parcel.java:2426)
	at android.os.Parcel.createException(Parcel.java:2410)
	at android.os.Parcel.readException(Parcel.java:2393)
	at android.os.Parcel.readException(Parcel.java:2335)
	at android.content.pm.IPackageManager$Stub$Proxy.getPackagesForUid(IPackageManager.java:5389)
	at android.app.ApplicationPackageManager$3.recompute(ApplicationPackageManager.java:1013)
	at android.app.ApplicationPackageManager$3.recompute(ApplicationPackageManager.java:1007)
	at android.app.PropertyInvalidatedCache.query(PropertyInvalidatedCache.java:562)
	at android.app.ApplicationPackageManager.getPackagesForUid(ApplicationPackageManager.java:1026)
	at com.asksven.android.common.nameutils.UidNameResolver.getNameForUid(UidNameResolver.java:107)
	at com.asksven.android.common.privateapiproxies.BatteryStatsProxy.getNetworkUsageStats(BatteryStatsProxy.java:3508)
	at com.asksven.betterbatterystats.data.StatsProvider.getCurrentNetworkUsageStatList(StatsProvider.java:1388)
	at com.asksven.betterbatterystats.data.StatsProvider.populateReference(StatsProvider.java:2710)
	at com.asksven.betterbatterystats.data.StatsProvider.setCurrentReference(StatsProvider.java:2494)
	at com.asksven.betterbatterystats.services.WriteCurrentReferenceService.onHandleIntent(WriteCurrentReferenceService.java:51)
	at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:78)
	at android.os.Handler.dispatchMessage(Handler.java:106)
	at android.os.Looper.loopOnce(Looper.java:201)
	at android.os.Looper.loop(Looper.java:288)
	at android.os.HandlerThread.run(HandlerThread.java:67)
@Iey4iej3 Iey4iej3 changed the title Crash when looking at partial wakelocks (Android 12) Crash with permission error at method getPackagesForUid (Android 12) Aug 13, 2022
@Iey4iej3
Copy link
Author

I am using work profile (BBS is running under the main profile). I am not sure whether it affects.

@Enkidu70
Copy link

Enkidu70 commented Jan 9, 2023

Same here on A13, Magisk, root + Shelter, latest BBS...

type: crash
osVersion: OnePlus/OnePlus8T_EEA/OnePlus8T:13/TKQ1.221128.002/eng.abhay.20221229.033041:user/release-keys
package: com.asksven.betterbatterystats_xdaedition:107
process: com.asksven.betterbatterystats_xdaedition

java.lang.SecurityException: getPackagesForUid: UID 10436 requires android.permission.INTERACT_ACROSS_USERS_FULL or android.permission.INTERACT_ACROSS_USERS or android.permission.INTERACT_ACROSS_PROFILES to access user 10.
 at android.os.Parcel.createExceptionOrNull(Parcel.java:3021)
 at android.os.Parcel.createException(Parcel.java:3005)
 at android.os.Parcel.readException(Parcel.java:2981)
 at android.os.Parcel.readException(Parcel.java:2923)
 at android.content.pm.IPackageManager$Stub$Proxy.getPackagesForUid(IPackageManager.java:4789)
 at android.app.ApplicationPackageManager$3.recompute(ApplicationPackageManager.java:1147)
 at android.app.ApplicationPackageManager$3.recompute(ApplicationPackageManager.java:1141)
 at android.app.PropertyInvalidatedCache.query(PropertyInvalidatedCache.java:931)
 at android.app.ApplicationPackageManager.getPackagesForUid(ApplicationPackageManager.java:1160)
 at com.asksven.android.common.nameutils.UidNameResolver.getNameForUid(UidNameResolver.java:111)
 at com.asksven.android.common.privateapiproxies.StatElement.getFullQualifiedName(StatElement.java:88)
 at com.asksven.android.common.privateapiproxies.StatElement.getFqn(StatElement.java:112)
 at com.asksven.betterbatterystats.adapters.StatsAdapter.getView(StatsAdapter.java:231)
 at android.widget.AbsListView.obtainView(AbsListView.java:2423)
 at android.widget.ListView.makeAndAddView(ListView.java:2067)
 at android.widget.ListView.fillDown(ListView.java:793)
 at android.widget.ListView.fillFromTop(ListView.java:855)
 at android.widget.ListView.layoutChildren(ListView.java:1838)
 at android.widget.AbsListView.onLayout(AbsListView.java:2220)
 at android.view.View.layout(View.java:23698)
 at android.view.ViewGroup.layout(ViewGroup.java:6413)
 at androidx.swiperefreshlayout.widget.SwipeRefreshLayout.onLayout(SwipeRefreshLayout.java:689)
 at android.view.View.layout(View.java:23698)
 at android.view.ViewGroup.layout(ViewGroup.java:6413)
 at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1829)
 at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1673)
 at android.widget.LinearLayout.onLayout(LinearLayout.java:1582)
 at android.view.View.layout(View.java:23698)
 at android.view.ViewGroup.layout(ViewGroup.java:6413)
 at android.widget.FrameLayout.layoutChildren(FrameLayout.java:332)
 at android.widget.FrameLayout.onLayout(FrameLayout.java:270)
 at android.view.View.layout(View.java:23698)
 at android.view.ViewGroup.layout(ViewGroup.java:6413)
 at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1829)
 at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1673)
 at android.widget.LinearLayout.onLayout(LinearLayout.java:1582)
 at android.view.View.layout(View.java:23698)
 at android.view.ViewGroup.layout(ViewGroup.java:6413)
 at android.widget.FrameLayout.layoutChildren(FrameLayout.java:332)
 at android.widget.FrameLayout.onLayout(FrameLayout.java:270)
 at android.view.View.layout(View.java:23698)
 at android.view.ViewGroup.layout(ViewGroup.java:6413)
 at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1829)
 at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1673)
 at android.widget.LinearLayout.onLayout(LinearLayout.java:1582)
 at android.view.View.layout(View.java:23698)
 at android.view.ViewGroup.layout(ViewGroup.java:6413)
 at android.widget.FrameLayout.layoutChildren(FrameLayout.java:332)
 at android.widget.FrameLayout.onLayout(FrameLayout.java:270)
 at com.android.internal.policy.DecorView.onLayout(DecorView.java:797)
 at android.view.View.layout(View.java:23698)
 at android.view.ViewGroup.layout(ViewGroup.java:6413)
 at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:3914)
 at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:3301)
 at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:2289)
 at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:8963)
 at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1319)
 at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1327)
 at android.view.Choreographer.doCallbacks(Choreographer.java:985)
 at android.view.Choreographer.doFrame(Choreographer.java:916)
 at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1302)
 at android.os.Handler.handleCallback(Handler.java:942)
 at android.os.Handler.dispatchMessage(Handler.java:99)
 at android.os.Looper.loopOnce(Looper.java:201)
 at android.os.Looper.loop(Looper.java:288)
 at android.app.ActivityThread.main(ActivityThread.java:7951)
 at java.lang.reflect.Method.invoke(Native Method)
 at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:550)
 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:942)
Caused by: android.os.RemoteException: Remote stack trace:
 at com.android.server.pm.ComputerEngine.enforceCrossUserOrProfilePermission(ComputerEngine.java:2960)
 at com.android.server.pm.IPackageManagerBase.getPackagesForUid(IPackageManagerBase.java:655)
 at android.content.pm.IPackageManager$Stub.onTransact(IPackageManager.java:2187)
 at com.android.server.pm.PackageManagerService$IPackageManagerImpl.onTransact(PackageManagerService.java:6026)
 at android.os.Binder.execTransactInternal(Binder.java:1302)

@Iey4iej3
Copy link
Author

You might as well look at the logcat to see when BBS crashes (by looking at the keyword Result [wakelock).

@ccoager
Copy link

ccoager commented Feb 7, 2023

The fix is to add this to AndroidManifest.xml and rebuild the app.
<uses-permission android:name="android.permission.INTERACT_ACROSS_USERS" />

Permissions need to be granted as well.

pm grant com.asksven.betterbatterystats android.permission.INTERACT_ACROSS_USERS
pm grant --user <uid> com.asksven.betterbatterystats android.permission.INTERACT_ACROSS_USERS

@mikklfr
Copy link

mikklfr commented Feb 8, 2023

In case anyone asks themselves how to get their work profile id:
adb shell dumpsys user
Then look for something like:

UserInfo{10:Profil professionnel:1030} serialNo=10 isPrimary=false parentId=0
    Type: android.os.usertype.profile.MANAGED
    Flags: 4144 (INITIALIZED|MANAGED_PROFILE|PROFILE)

Here id is 10

@ao57772
Copy link

ao57772 commented Sep 9, 2023

I am having the same on android 13, pixel 7a. I am using the work profile too. I tried to grant the app INTERACT_ACROSS_USERS but since it is not in the manifest, it was rejected.

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

No branches or pull requests

5 participants