3

I'm having a bizarre issue where apps, adb, etc. can properly access my internal and external SD storage without issue unless they are running as root, in which case they are completely inaccessible. This is on my Oppo Find 7 running ColorOS 1.2.7i (Android 4.3), and I've verified that I am not suffering from this issue with WRITE_EXTERNAL_STORAGE. I am not sure when this started occurring but I think it was after an OS update quite a while back.

When I run mount in an unprivileged adb shell, it has these entries that do not appear when I run it as the superuser:

/dev/block/vold/179:65 /storage/sdcard1 vfat rw,dirsync,nosuid,nodev,noexec,relatime,uid=1000,gid=1023,fmask=0702,dmask=0702,allow_utime=0020,codepage=cp437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro 0 0
/dev/block/vold/179:29 /storage/sdcard0 ext4 rw,seclabel,nosuid,nodev,noexec,relatime,discard,nodelalloc,noauto_da_alloc,data=ordered 0 0
/dev/block/vold/179:29 /mnt/secure/asec ext4 rw,seclabel,nosuid,nodev,noexec,relatime,discard,nodelalloc,noauto_da_alloc,data=ordered 0 0
tmpfs /storage/sdcard0/.android_secure tmpfs ro,seclabel,relatime,size=0k,mode=000 0 0

I can remount those partitions elsewhere while root and access them just fine within the same shell, but the permissions are funky and no other root apps can access them:

$ su
# mkdir /storage/sd_test
# chmod 777 /storage/sd_test
# ls -al /storage | grep sd_test
# drwxrwxrwx root     root              2015-05-28 15:17 sd_test

... good so far ...

# mount -o rw,user,umask=0000 -t vfat /dev/block/vold/179:65 /storage/sd_test
# ls -al /storage | grep sd_test
d---rwxr-x system   media_rw          2015-05-28 15:00 sd_test
# chmod 777 /storage/sd_test
# ls -al /storage | grep sd_test
d---rwxr-x system   media_rw          2015-05-28 15:00 sd_test

... different permissions, but I can see and read/write the files inside ...

screenshot from another app

... Root Explorer shows it with the "original" permissions but the folder is empty ...

# mount | grep sd_test
/dev/block/vold/179:65 /storage/sd_test vfat rw,dirsync,relatime,uid=1000,gid=1023,fmask=0702,dmask=0702,allow_utime=0020,codepage=cp437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro 0 0

... hmm.

My /etc/vold.fstab just has one line:

dev_mount sdcard /storage/sdcard1 auto /devices/msm_sdcc.2/mmc_host

And /fstab.qcom:

/dev/block/platform/msm_sdcc.1/by-name/system         /system      ext4    ro,barrier=1,discard                                wait
/dev/block/platform/msm_sdcc.1/by-name/userdata       /data        ext4    nosuid,nodev,barrier=1,noauto_da_alloc,discard      wait,check,encryptable=footer
/devices/msm_sdcc.2/mmc_host                          /storage/sdcard1   vfat    nosuid,nodev         wait,voldmanaged=sdcard:auto
/devices/msm_sdcc.1/mmc_host/mmc0/mmc0:0001/block/mmcblk0         /storage/sdcard0   ext4    nosuid,nodev,barrier=1,noauto_da_alloc,discard        wait,voldmanaged=sdcard:29

How can I fix this?

  • First Android 4.2.2 and earlier, the device-specific vold.fstab configuration file defines mappings from sysfs devices to filesystem mount points, and each line follows this format dev_mount <label> <mount_point> <partition> <sysfs_path> [flags] Yourdevice dev_mount sdcard /storage/sdcard1 auto /devices/msm_sdcc.2/mmc_host. Cont. Next comment. – Bo Lawson Aug 3 '15 at 17:24
  • Android releases 4.3 and later, the various fstab files used by init, vold and recovery were unified in the /fstab.<device> file. For external storage volumes that are managed by vold, the entries should have the following format. <src> <mnt_point> <type> <mnt_flags> <fs_mgr_flags Do you understand the format your running is for 4.2.2 and below as stated in post color OS 4.3 which is wrong format (reference) – Bo Lawson Aug 3 '15 at 17:29
  • @BoLawson I tried copying /fstab.qcom over top of /etc/vold.fstab and rebooting, but there is no change in behavior. – Matthew Read Aug 3 '15 at 19:46
  • I'm looking I would say go to the source code for your OS and get the device-specific storage_list.xml somewhere around frameworks /base/something: xml to get the storage_list.xml which has the mount points. But I think color os is closed sourced I just have not found the legit one. I am unsure but I think Sdk platform might have them through I am researching. This is the [storage_list.xml] (android.googlesource.com/device/moto/wingray/+/master/overlay/…) not your device file you are looking for and at the bottom is the mount points – Bo Lawson Aug 3 '15 at 20:30
0

So, it turns out that SuperSU automatically checked off its "Mount namespace separation" setting without telling me! I had no idea it even had such a feature, much less that it was broken.

  • Good that you figured it out already. Could you tell us how did you end up at this conclusion? That may help somebody in troubleshooting a similar case. – Firelord Aug 30 '15 at 9:29
  • @Firelord Luck, really. I was going through SuperSU's settings and saw it, and immediately realized it was probably causing the issue. – Matthew Read Aug 30 '15 at 16:32

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.