SuperSU v1.50 released – important dev details
Another day another update – and unless some major issues arise, quite likely the last one until September.
The latest flashable ZIP is linked at the very bottom of the post. The Play store has also been updated, as have all CF-Auto-Root’s.
I recommend all end-users on 4.3 update immediately, as root-app-devs will be unlikely to want to support quirks of the previous releases.
PS the ZIP should now also be compatible with the new CM
ARMv5 compatibility dropped
Due to some incompatibilities in the new code for 4.3, and not wanting to create a maintenance nightmare for myself, I have dropped support for ARMv5. The last ARMv5 (and v6) compatible version is v1.45.
It has been quite some time since the last flagship device came out running an older version than ARMv7, the small number of SuperSU users who are still using it will be unlikely to benefit (much) from further updates to SuperSU anyway.
Sorry if this creates problems for you. I may revisit ARMv5 support when a proper 4.3 AOSP build tree is available for it.
Proper storage mounts
All the storage locations ( /storage/emulated/0, obb, legacy, etc) are now properly available from su. These should be the exact same storage mounts as available to the non-privileged portion of your app, and they are now mounted instead of symlinked. This should solve most (internal) storage-related issues with most apps.
Proper mount namespaces
Mount namespaces were brought to Android in 4.2, and are a good thing (just like all the new restrictions in 4.3 really are a good thing, even if it’s causing us some root grief at the moment).
With the previous 4.3 SuperSU versions all root commands were executed in the same (global!) mount namespace (as if this was still 4.1). This is bad for multiple reasons. One reason is that if one su process remounted /system read-write, other processes could sneakily be writing to /system, opening a possible malware hole. Another reason is unintended interference. If you have two root apps who want to update something in /system, one could just be done (remounting the system back read-only) while the other one was still updating. The latter app will probably break in new and unexpected ways.
In this release, su calls from Android apps under 4.3 have same mount privacy as they would have had under 4.2. As it should be!
(Note that su calls from non-Android apps, like adb shell, share a single mount namespace)
If you’re going to watch the number of processes running on your device, you will see several daemonsu processes. There is the master daemon, with a subprocess for every different Android app user id that uses su – and a separate one for non-Android callers -, which in turn has a subprocess for every su session (which automatically terminates). You might also see a zombie process sometimes, these are automatically cleaned up.
The exact how and why is long and technical, but it’s needed, and these processes do not eat any resources while su isn’t being used (they’re just sleeping). On the plus side, when debugging you can easily see which su calling process is hogging all your resources, as the process name reflects this information, which will be visible in ps and top.
Fixing internal storage issues
If this is not your first SuperSU version on 4.3, some files on your internal storage may have the wrong permissions, which will prevent you or your apps from deleting/modifying some files.
This can be fixed pretty easily, but you need to install busybox first, as toolbox’s builtin chown command does not recursive directories. Once busybox is installed, this will fix the problem (run from terminal, adb shell, etc, as long as you have a su # prompt):
busybox chown -R 1023.1023 /data/media/*
– Daemon: proper storage mounts
– Daemon: per-uid mount namespace
– Daemon: another exitcode issue fix
– Daemon: adjusted reload code
– Daemon: descriptive process names
– GUI: added reboot advisory after binary update
– ARCH: Only ARMv7 and X86 are now supported, ARMv5 dropped
– ZIP: install also to install-recovery.sh and init.d