Subject: Re: bug#64445: 30.0.50; Android: Emacs cannot access /storage/emulated/0 although other apps can

From: Milan Zamazal <[email-masked]>
Date: Wed, 05 Jul 2023 11:44:39 +0200

>>>>> "PL" == Po Lu <[email-masked]> writes:

    PL> Milan Zamazal <[email-masked]> writes:
    >> W org.gnu.emacs: type=1400 audit(0.0:910): avc: denied { read }
    >> for comm=456D616373206D61696E2074687265 name="/" dev="dm-0" ino=2
    >> scontext=u:r:untrusted_app:s0:c157,c256,c512,c768
    >> tcontext=u:object_r:rootfs:s0 tclass=dir permissive=0

    PL> Right... how exactly are you trying to access /sdcard?  Through
    PL> Dired?

Yes, for example: ‘C-x C-f /sdcard/ RET’

    PL> If so, my guess is that ls-lisp is trying to stat the root file
    PL> system, which is forbidden by some versions of Android.  Would
    PL> you please enable debug-on-error (Options -> Enter Debugger on
    PL> Error) and display the backtrace from whatever file access
    PL> operation complains?

It's this one:

  directory-files-and-attributes("/sdcard/" nil nil t string)

I also tried what happens in ‘M-x shell‘ and for example ‘cat’ does the
same:

  $ cat /sdcard/existent-file
  cat: /sdcard/existent-file: Permission denied
  $ cat /sdcard/non-existent-file
  cat: /sdcard/non-existent-file: No such file or directory

This at least verifies that /sdcard points to the right location.

The same happens in Termux if and only if I remove the given storage
permission from it.  But in Emacs, it happens whether the permission is
given or not.