Android 3.2+ კოდი (შეუმჩნევლად?) ხელს უშლის ჩაწერის წვდომას გარე მეხსიერებაზე

როგორც ჩანს, Google-ს აქვს შეცდომა თავის AOSP კოდში, რომელიც დაინერგა Android 3.2-ის გარშემო, რაც გავლენას ახდენს იმაზე, თუ როგორ ამუშავებს OS USB მეხსიერებას და შეუძლია ხელი შეუშალოს ჩაწერის წვდომას SD ბარათებსა და USB დისკებზე. XDA Elite აღიარებული დეველოპერი, უფროსი მოდერატორი და ახალი ამბების მწერალიჯაჭვის ცეცხლი აჯამებს საკითხს თავისში ბლოგის პოსტი:

წარსულში, აპლიკაცია ითხოვდა "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 ბარათად". The რეალური SD ბარათი შემდეგ ხდება მეორადი გარე მეხსიერება და იკეტება მიუწვდომელით დაცული.WRITE_MEDIA_STORAGE"ნებართვა.

Chainfire-მა თავისი შეკითხვა წარუდგინა Android Developers Office Hours გუნდში და მათ დაასრულეს განხილვა მათში ცოცხალი Hangout 11 აპრილს. სამწუხაროდ, Hangout-ში დამსწრე Google-ის ინჟინრებმა ვერ შეძლეს რაიმე რეალური პასუხის გაცემა, რადგან ეს რთული საკითხია და კითხვა მხოლოდ შოუს პირდაპირ ეთერში გასვლამდე ერთი საათით ადრე დაისვა. თუმცა, მათ დაჰპირდნენ, რომ ამ საკითხს ბოლომდე ჩაწვდნენ და მოგვიანებით დაუბრუნდნენ Chainfire-ს (და ჩვენ).

ასევე Chainfire-ის თანახმად, პრობლემა რეალურად არის ICS build-ებზე SGS2-ისთვისაც, თუმცა Samsung "იმუშავა მის გარშემო ძალიან მახინჯი ნებართვის ჰაკის გამოყენებით":

რასაც აქ ხედავთ არის Samsung piggybacking WRITE_MEDIA_STORAGE ნებართვა WRITE_EXTERNAL_STORAGE ნებართვაზე, ამიტომ აპებს არ შეექმნათ აღწერილი პრობლემა.

მიზნად ისახავს თუ არა Google-ს დაკავშირებული SD ბარათების და USB დისკების შეზღუდვა, რათა იყოს მხოლოდ წაკითხული მესამე მხარის აპებისთვის, ჯერ გასარკვევია. თუმცა ის ბადებს შემაშფოთებელ აზრს: რა მოხდება, თუ კოდი და თანმხლები შენიშვნები Google-ის პირველია. გარე მეხსიერებისთვის ჩაწერის ერთგვარი დაცვის დანერგვის ეტაპები და ამით ჩვენი მობილურის შემდგომი შეზღუდვა თავისუფლება? ჩვენ შეგვიძლია მხოლოდ იმედი ვიქონიოთ, რომ ეს არის ნამდვილი შეცდომა, რადგან თავისუფლება არის ერთ-ერთი მიზეზი იმისა, რის გამოც ჩვენ ყველანი თავს არიდებენ მას Ბნელი მხარე.

[დიდი მადლობა Chainfire-ს ხელმძღვანელობისთვის და დახმარებისთვის!]