Κωδικός Android 3.2+ (κατά λάθος;) Αποτροπή πρόσβασης εγγραφής στον εξωτερικό χώρο αποθήκευσης

Φαίνεται ότι η Google έχει ένα σφάλμα στον κώδικα AOSP της που παρουσιάστηκε γύρω από το Android 3.2, το οποίο επηρεάζει τον τρόπο με τον οποίο το λειτουργικό σύστημα χειρίζεται την αποθήκευση USB και μπορεί να αποτρέψει την πρόσβαση εγγραφής σε κάρτες SD και USB sticks. Αναγνωρισμένος προγραμματιστής XDA Elite, Senior Moderator και Συγγραφέας ΕιδήσεωνΑλυσίδα συνοψίζει το θέμα στα δικά του ανάρτηση:

Στο παρελθόν, μια εφαρμογή ζητούσε το "WRITE_EXTERNAL_STORAGE" άδεια, η οποία θα παρείχε πρόσβαση εγγραφής σε όλα εξωτερικοί χώροι αποθήκευσης (χρήστης/ομάδα"sdcard_rw"). Αυτό προφανώς έχει αλλάξει για να παραχωρεί μόνο πρόσβαση εγγραφής στο πρωταρχικός εξωτερική αποθήκευση. Μια δεύτερη άδεια έχει εισαχθεί με την ονομασία "WRITE_MEDIA_STORAGE", το οποίο θα παραχωρούσε πρόσβαση στους άλλους εξωτερικούς αποθηκευτικούς χώρους (χρήστης/ομάδα "media_rw").

Το πρόβλημα είναι ότι σε τρίτο μέρος δεν θα εκχωρηθεί στην πραγματικότητα αυτή η άδεια, μόνο οι εφαρμογές συστήματος και οι εφαρμογές που παρέχονται από τον κατασκευαστή της συσκευής θα λαμβάνουν κανονικά αυτήν την άδεια. Υπάρχουν εξαιρέσεις, προφανώς σε ορισμένες συσκευές θα εκχωρηθεί αυτή η άδεια σε εφαρμογές τρίτων, αλλά σύμφωνα με τις πηγές του AOSP, σίγουρα δεν θα έπρεπε.

Καθώς ο Chainfire διερεύνησε το ζήτημα, συνάντησε κώδικα στο /system/vold/Volume.cpp που αναφέρει ρητά:

 εάν (πρωτεύουσα αποθήκευση) {

// Ειδική περίπτωση η κύρια κάρτα SD.

// Για αυτό παραχωρούμε πρόσβαση εγγραφής στην ομάδα SDCARD_RW.

gid = AID_SDCARD_RW;

} αλλο {

// Για δευτερεύουσα εξωτερική αποθήκευση κρατάμε τα πράγματα κλειδωμένα.

gid = AID_MEDIA_RW;

}

Σε πολλές συσκευές, το εσωτερικό φλας θεωρείται η "κύρια κάρτα SD". ο πραγματικός Η κάρτα SD γίνεται στη συνέχεια η δευτερεύουσα εξωτερική αποθήκευση και κλειδώνεται προστατευμένη από το ανέφικτο "WRITE_MEDIA_STORAGE"άδεια.

Ο Chainfire υπέβαλε την ερώτησή του στο Ώρες γραφείου προγραμματιστών Android ομάδα, και κατέληξαν να το συζητούν στη δική τους ζωντανό στέκι στις 11 Απριλίου. Δυστυχώς, οι μηχανικοί της Google που ήταν παρόντες στο hangout δεν κατάφεραν να δώσουν πραγματικές απαντήσεις, καθώς αυτό είναι ένα περίπλοκο ζήτημα και η ερώτηση τέθηκε μόνο μια ώρα πριν από τη ζωντανή προβολή της εκπομπής. Ωστόσο, έχουν υποσχεθεί να φτάσουν στο βάθος αυτού του ζητήματος και να επιστρέψουν στο Chainfire (και σε εμάς) αργότερα.

Επίσης, σύμφωνα με το Chainfire, το πρόβλημα υπάρχει στην πραγματικότητα και στις εκδόσεις ICS για το SGS2, αν και η Samsung "εργάστηκε γύρω από αυτό χρησιμοποιώντας ένα πολύ άσχημο hack άδειας":

Αυτό που βλέπετε εδώ είναι η Samsung γουρουνάκι την άδεια WRITE_MEDIA_STORAGE στην άδεια WRITE_EXTERNAL_STORAGE, ώστε οι εφαρμογές να μην αντιμετωπίζουν το πρόβλημα που περιγράφεται.

Το εάν η Google προτίθεται να περιορίσει τις συνδεδεμένες κάρτες SD και τα USB sticks να είναι μόνο για ανάγνωση για εφαρμογές τρίτων ή όχι, μένει να φανεί. Ωστόσο, γεννά μια ανησυχητική σκέψη: Τι θα συμβεί αν ο κωδικός και οι συνοδευτικές σημειώσεις είναι οι πρώτες της Google στάδια εφαρμογής κάποιου είδους προστασίας εγγραφής για εξωτερικό χώρο αποθήκευσης, και συνεπώς περαιτέρω περιορισμού του κινητού μας ελευθερία? Μπορούμε μόνο να ελπίζουμε ότι αυτό είναι ένα γνήσιο σφάλμα, καθώς η ελευθερία είναι ένας από τους λόγους που όλοι το αποφεύγουμε Σκοτεινή πλευρά.

[Ευχαριστώ πολύ το Chainfire για το κεφάλι και τη βοήθεια!]