Google исправляет кошмарную ошибку Android, из-за которой пользователь не мог позвонить в экстренные службы

Выпущено январское исправление безопасности для Android, которое исправляет одну из самых неприятных ошибок Android, которые могут возникнуть за последнее время: некоторые приложения могут помешать вам связаться с 911 или другими номерами служб экстренной помощи по всему миру.

В начале декабря в сабреддите GooglePixel появилась душераздирающая история от пользователя, у которого произошел сбой Pixel 3, когда он больше всего в этом нуждался: когда он набирал экстренную службу 911 для своей бабушки, которая «выглядела так, будто у нее случился инсульт». Вся телефонная подсистема вышла из строя. сразу после звонка в экстренные службы, а пользователь KitchenPicture5849 сказал, что не может принять вызов, чтобы соединиться, или повесить трубку, чтобы повторить вызов. К счастью, ближайший стационарный телефон был доступен после того, как их телефон Android вышел из строя, и были вызваны службы экстренной помощи.

После того, как кризис закончился, пользователь сделал еще один звонок на номер службы экстренной помощи со своего смартфона, и Android снова дал сбой, указывая на то, что это не была разовая ошибка. Проверка счета за телефон также показала, что KitchenPicture5849 никогда не подключался к службе 911. Они говорят, что также получили несколько других личных сообщений от пользователей, которые сказали, что столкнулись с той же ошибкой.

Google связался с пользователем и публично ответил на сообщение 8 декабря:

Основываясь на наших исследованиях, мы смогли воспроизвести проблему при ограниченном наборе обстоятельств. Мы считаем, что проблема присутствует только на небольшом количестве устройств с установленным приложением Microsoft Teams, когда пользователь не вошел в систему, и в настоящее время нам известно только об одном отчете пользователя об этой ошибке. Мы определили, что проблема была вызвана непреднамеренным взаимодействием между приложением Microsoft Teams и базовой операционной системой Android. Microsoft тесно сотрудничает с Google, чтобы устранить это непреднамеренное взаимодействие.

Google заявил, что Microsoft выпустит обновление для приложения как можно скорее, и что пользователям следует проверять наличие обновлений в Play Store. Компания также упомянула, что патч для ОС будет выпущен через месяц, в начале января (это сегодня). В то время Google не предоставил никаких дополнительных комментариев по этому поводу.

Почему приложения могут сломать службу 911

Задерживать. Microsoft Teams сломала службу 911? Могут ли случайные приложения для Android нарушить работу экстренных служб? Как? Почему сторонние приложения находятся в тысячах футов от такой важной функции? Какие-либо другие приложения нарушают работу службы экстренной помощи или только Microsoft Teams? В то время как Teams исправили, можно ли было позволить пользователям Android зависать с этой ошибкой на уровне ОС в течение месяца, особенно когда мы не знаем, делают ли это другие приложения? Android есть Android, поэтому многие телефоны все равно никогда не починят. Как пользователи могут узнать, что аварийные службы будут работать? За исключением того, что Google не дал никаких ответов, кроме как ждать месяц исправления.

К счастью, некоторые очень умные люди в сообществе Android смогли дать ответы, которыми Google не поделился. Мишаал Рахман, старший технический редактор Esper, написал невероятный пост на Medium , в котором подробно описал, как работает ошибка и почему она возникает. Приложения для Android с функцией телефонных звонков могут зарегистрировать «PhoneAccount» в системе, что указывает на то, что они могут совершать звонки. Есть несколько приложений, которые можно установить с помощью PhoneAccount, в том числе одно под названием «CAPABILITY_PLACE_EMERGENCY_CALLS». Когда приходит время звонить в 911, Android сортирует список зарегистрированных телефонных учетных записей и выбирает одну из них. Все идет нормально.

Одна из нескольких ошибок, выявленных в сообщении Рахмана, заключается в том, что Microsoft Teams будет регистрировать дополнительную учетную запись PhoneAccount в системе каждый раз при запуске Teams, если вы не вошли в систему. Обратите внимание, что нередко можно установить Microsoft Teams, а затем никогда ее не использовать — распространенная жалоба на приложение Android Teams заключается в том, что оно часто автоматически выводит пользователей из системы.

Если вы вышли из системы, запуск Microsoft Teams 10 раз засорит ваш телефон 10 дубликатами PhoneAccounts из Teams. Команды не должны этого делать, и обновление Microsoft помешало командам это делать, но большого количества дубликатов PhoneAccounts также не должно быть достаточно, чтобы поставить телефонную систему Android на колени.

Следующая ошибка: при выборе учетной записи PhoneAccount для экстренного вызова Android выполняет сложный процесс сортировки, чтобы определить, какую учетную запись использовать. Последним шагом в этом процессе сортировки, средством разрешения конфликтов, является сортировка по хэш-коду. Сравнение хэш-кодов просто вычитает один хэш-код из другого.

Но, как и в случае с глупой ошибкой Microsoft Exchange 2000, случившейся на днях, это может привести к целочисленному переполнению или потере значимости, и теперь телефонная подсистема выйдет из строя. В коде Google есть ошибки, но поскольку это последний способ решить проблемы с сортировкой после того, как вы попробуете более очевидные вещи, такие как имя пакета, его следует вызывать только для очень конкретного экземпляра приложения, которое создает дубликаты PhoneAccounts. Так что спасибо Майкрософт!

Исправление Google для этой ошибки находится здесь под названием «Исправить целочисленное переполнение / недополнение, вызванное сортировкой дублирующейся учетной записи телефона во время вызова службы экстренной помощи. « Вместо того, чтобы вычитать один хэш-код из другого и потенциально работать с действительно большим или очень маленьким числом, которое приводит к сбою системы, Google теперь обрабатывает два числа с помощью функции Java «Integer.compare». Это возвращает только -1, 0 или 1, указывая на меньший, идентичный или больший результат сравнения.

Если вы сначала похожи на меня и задаетесь вопросом, почему Android вообще сортирует учетные записи телефонов, а не просто использует учетную запись по умолчанию на SIM-карте, я сделаю сумасшедшее предположение и скажу, что это была попытка заставить службу 911 работать независимо. Который. На случай, если основная учетная запись не работает, Android нужен список всех возможных телефонных учетных записей, которые он может попробовать, и он хочет сделать это автоматически, чтобы подключиться к 911 любыми необходимыми средствами. Эта система сортировки существует только для связи со службами экстренной помощи, поэтому обычные телефонные звонки по-прежнему работают для пострадавших пользователей.

Третья ошибка в этом беспорядке заключается в том, что Microsoft Teams даже не регистрируется в качестве обработчика экстренных вызовов. Команды создали миллион учетных записей PhoneAccounts, и он не использовал флаг CAPABILITY_PLACE_EMERGENCY_CALLS, но все же сломал 911. Процесс сортировки Google начинается с запроса всех телефонных учетных записей, тогда как лучшим первым шагом будет начать со всех телефонных учетных записей, которые поддерживают экстренные вызовы. звонки.

Google принимает еще более радикальное решение перед этой последней ошибкой и удаляет все «самоуправляемые» телефонные учетные записи из процедуры службы экстренной помощи 911. «Самоуправляемые» учетные записи телефонов Android, такие как Microsoft Teams, получают более прямой доступ к стеку телефонии Android и могут использовать свои собственные функции. Система экстренных вызовов Android теперь будет учитывать только более простых операторов телефонной связи, которые подключаются к стандартному приложению для телефона, например к учетной записи вашего оператора связи.

Все эти другие приложения VoIP, вероятно, все еще можно использовать для самостоятельного вызова 911 (во многих странах функция 911 требуется по закону). Но если вы откроете номеронабиратель по умолчанию и нажмете 911, Android будет выбирать только из стандартных телефонных учетных записей, управляемых системой.

Кого исправляют и как проверить ошибку службы 911

Рахман говорит, что ошибка Google для этого — CVE-2021-39659, которую ежемесячный бюллетень по безопасности классифицирует как отказ в обслуживании с высокой степенью серьезности с исправлениями для устройств под управлением Android 10, 11 и 12. В кодовой базе Android Google По сути, это исправление является полным бэкпортом на Android 8.0, который технически больше не поддерживается. Это в основном чисто теоретически, поскольку нулевые поставщики на самом деле не устанавливают обновления безопасности для таких старых устройств. Но код есть, если кому надо.

Стек телефонии Android (пока?) не является легко обновляемым модулем Project Mainline, поэтому единственный способ получить исправление — это ежемесячное обновление безопасности Android за январь 2022 года. Samsung должна обновить все телефоны в этом списке , начиная с этой недели, в то время как Google выпускает исправления для Pixel 3a, 4, 4a, 5 и 5a. Обновление: также ожидается обновление экстренного вызова для вышедшего из строя Pixel 3.

Обновление для Pixel 6 еще не пришло. Новейший флагман Google в настоящее время находится в кризисе обновлений. Обновление за декабрь 2021 г. было отменено из-за проблем с немобильным подключением (телефонные звонки не работают). Поскольку Google изо всех сил пытается исправить ситуацию, следующее обновление Pixel 6 с этим исправлением 911 должно быть «в конце января». Оба графика Google: «начало января» и «конец января» кажутся невероятно медленными из-за бага, который может привести к буквальной смерти пользователей.

Я сделаю еще одно безумное предположение и скажу, что Pixel 6 — странный телефон, потому что это совершенно другой SoC и модем (как от подразделения Samsung Exynos, так и все остальные пиксели используют Qualcomm). Создание сезона праздничных покупок не дало Google возможности маневрировать в случае задержек с запуском. Это не делает его менее разочаровывающим для телефона с большим преимуществом при первом использовании, но, надеюсь, это временная проблема.

Я удивлен, что это просто «высокая» (а не «критическая») ошибка, и что ее развертывание занимает от одного до двух месяцев. Задержка скорой помощи может быть фатальной, поэтому было бы неплохо, если бы все это прибыло быстрее, а не так, как Google решает эту проблему.

До сих пор мы слышали только о том, что Microsoft Teams вызывает эту ошибку дублирования телефонных учетных записей, но неизвестно, совершают ли какие-либо другие приложения аналогичную ошибку. Если вы видите приложение в этом списке, создающее много дублирующих учетных записей, скорее всего, оно мешает вам подключиться к службам экстренной помощи. Я рекомендую удалить приложение, связаться с разработчиком и сообщить другим в Твиттере или где-либо еще.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *