Làm thế nào một bức ảnh đơn giản lại có thể khiến điện thoại Android gặp sự cố đến mức bị lỗi hệ thống được?
Đó chính là sự cố đang xảy ra với nhiều dòng điện thoại Android trong vài ngày qua. Chỉ cần đặt bức hình như dưới đây làm hình nền thiết bị, chiếc smartphone Android đó sẽ liên tục bị crash đến mức không thể sử dụng được.
Vấn đề này được phát hiện bởi Ice Universe. Theo leaker này, nhiều mẫu thiết bị của Samsung và Google đều bị ảnh hưởng, đồng thời vấn đề tương tự cũng xảy ra với người dùng các thiết bị khác như OnePlus, Nokia và Xiaomi – tuy nhiên không rõ các thiết bị này dùng ROM gốc theo máy hay ROM cook. Trong khi đó, dựa trên các thử nghiệm của trang Android Authority, các thiết bị Huawei dường như ít ảnh hưởng bởi vấn đề này.
Vậy chính xác thì nguyên nhân của điều này là gì? Davide Bianco, một trong những nhà phát triển hàng đầu của dự án tùy chỉnh ROM POSP, người đã từng đệ trình bản vá đầu tiên cho vấn đề đối với lỗi bug tracker trong ROM AOSP của Android.
Theo Bianco, vấn đề này xảy ra là vì hình ảnh này sử dụng dải màu RGB, thay vì dải màu sRGB được hỗ trợ trên Android. "Vấn đề này xảy ra khi người dùng muốn thiết lập hình nền bằng một hình ảnh không phải dải màu sRGB. Điều xảy ra là giá trị biến y cao hơn giới hạn của mảng biểu đồ màu (thường có giá trị tối đa là 256), làm cho SysUI bị crash. Một giải pháp sửa lỗi này có thể là giới hạn giá trị biến y luôn nhỏ hơn 256."
Dưới đây là lời giải thích cụ thể của Bianco:
"Vấn đề chính ở đây là giao diện SystemUI chỉ xử lý các hình ảnh nền với dải màu sRGB và không thực hiện bất kỳ kiểm tra nào đối với các hình ảnh nền không dùng sRGB. Điều này có thể dẫn tới sự cố gây crash máy trong lớp ImageProcessHelper, vì một biến được sử dụng để truy cập vào một mảng sẽ vượt quá giới hạn của mảng dữ liệu.
Biến này được gọi là y, và nó là tổng của các giá trị pixel RGB đã quét được hiện tại. Giá trị của pixel này thu được bằng cách quét mỗi hàng và cột của bề mặt bức ảnh theo thang màu xám (greyscale). Mỗi khi chúng ta có được một pixel, chúng ta sẽ gán biến y cho tổng các giá trị rgb của nó (thường tối đa là 255) và sử dụng biến đã cho để truy cập một yếu tố của mảng biểu đồ này (thường có kích thước tối đa là 256) và xử lý các tác vụ đối với yếu tố đã cho.
Như vậy, đối với các hình ảnh thang màu xám bình thường, tổng các giá trị rgb luôn là 255, nhưng hình ảnh trên lại không phải là hình ảnh rgb thông thường. Biến y của nó vượt quá 255, và nó tạo ra một ngoại lệ quá giới hạn (bất kỳ ngoại lệ nào trong SysUI đều bị xem như lỗi, dẫn đến vòng lặp crash liên tục bởi vì hình ảnh này sẽ được xử lý mỗi khi SysUI được khởi động.)
Vì vậy, một trong các giải pháp có thể là bổ sung thêm một kiểm tra cho phép y được gán giá trị tới 255 nếu y vượt qua giới hạn tối đa của thang điểm. Điều này thực sự hiệu quả nhưng sẽ làm cho chúng ta nhận được chất lượng hình ảnh kém hơn vì một số lý do."
Dylan Roussel, một nhà phát triển Android của trang 9t5Google cũng phát hiện ra rằng vấn đề này không xảy ra trên Android 11 khi hình ảnh luôn được chuyển về dải màu sRGB trước khi nó được xử lý bằng bất kỳ cách thức nào.
Trên thực tế, sự cố này không hoàn toàn mới. Các vấn đề tương tự từng được người dùng báo cáo từ một vài năm trước, và cũng chỉ mới vào tháng trước, trang Android Police từng cho biết về một vấn đề gần tương tự như vậy, đặc biệt chỉ xảy ra trên các điện thoại Pixel chạy ứng dụng Google Wallpapers.
Chúng tôi đã thử cài hình nền này lên chiếc Samsung Galaxy M11, và hậu quả hiện ra ngay trước mắt, thiết bị suýt biến thành cục gạch.
Như vậy, rõ ràng đây không phải là một lỗi liên quan đến mã độc mà chỉ do khả năng xử lý dải màu trong giao diện hệ thống của Android. Dù vậy cũng không nên liều lĩnh thử làm điều này với thiết bị của bạn.
Còn nếu bạn trót nghịch ngợm với hình ảnh nền này, hoặc bạn bị ai đó chơi khăm cài hình nền này vào thiết bị, có lẽ thử factory reset là cách làm sẽ hồi sinh chiếc điện thoại thân yêu của bạn. Dù vậy, đừng nên thử khi chưa biết chắc khả năng của mình.
Tham khảo Android Authority