Setiap hari, sejumlah besar perubahan di-commit ke kernel Linux upstream. Perubahan ini umumnya tidak dievaluasi untuk dampak keamanan, tetapi banyak di antaranya berpotensi memengaruhi keamanan kernel. Mengevaluasi setiap perubahan ini untuk mengetahui dampaknya terhadap keamanan adalah operasi yang mahal dan mungkin tidak dapat dilakukan. Sebagai gantinya, pendekatan yang lebih berkelanjutan dan dapat dikelola adalah menyinkronkan perubahan secara berkala dengan kernel Linux upstream.
Sebaiknya update perangkat secara rutin dengan kernel yang Didukung Jangka Panjang (LTS) yang lebih baru. Update LTS rutin dapat membantu mengatasi potensi kerentanan keamanan yang tidak dikenal, seperti laporan Project Zero ini dari awal tahun 2019, sebelum pengungkapan atau penemuan publik oleh pelaku kejahatan.
Prasyarat
- Cabang kernel umum Android (dari AOSP)
- Cabang staging penggabungan LTS untuk kernel perangkat target
- Cabang rilis kernel perangkat
- Repositori Git
- Toolchain build kernel
Menggabungkan dengan perubahan LTS
Langkah-langkah berikut menguraikan langkah-langkah umum untuk penggabungan LTS.
- Me-merge kembali cabang rilis kernel target ke cabang staging -LTS
- Menggabungkan linux-stable atau Android common secara lokal ke cabang staging -LTS
- Menyelesaikan konflik penggabungan (konsultasikan dengan pemilik area/kode sesuai kebutuhan)
- Mem-build secara lokal dan melakukan pengujian keandalan/unit (lihat bagian pengujian di bawah)
- Mengupload dan menggabungkan perubahan umum Android ke cabang staging LTS
- Menguji secara menyeluruh menggunakan cabang staging -LTS (lihat bagian pengujian di bawah)
- Meninjau hasil pengujian
- Atasi regresi, gabungkan bisek sebagai diperlukan
- Menggabungkan cabang staging -LTS ke cabang rilis kernel perangkat utama
- Membuat build Android baru untuk perangkat Anda yang menyertakan kernel LTS staging
- Mengompilasi build/ROM rilis dengan kernel baru
Contoh penggabungan dengan LTS.
Gabungkan android-4.9 ke utama (melalui staging LTS) dan checkout serta sinkronkan cabang staging LTS:
repo init -b <Device kernel LTS staging branch> # init
repo sync
git checkout -b lts <Device kernel LTS staging branch>
git merge <Device kernel release branch> # back-merge
git commit
Pada tahap ini, sebaiknya kirimkan penggabungan kembali ke remote sumber sebelum melanjutkan. Setelah itu, gabungkan Android umum ke dalam staging LTS.
git merge -X patience android-4.9-q # LTS merge
Menyelesaikan konflik penggabungan
Pada umumnya, ada konflik antara kernel umum Android dan cabang staging -LTS. Menyelesaikan konflik penggabungan selama penggabungan LTS dapat menjadi tantangan, jadi berikut beberapa tips bermanfaat untuk mengatasinya.
Penggabungan inkremental
Jika sudah cukup lama sejak kernel perangkat diupdate dengan LTS, kemungkinan besar sudah ada banyak (>50) rilis stabil sejak update gabungan terakhir dirilis di upstream. Cara terbaik untuk menanganinya adalah dengan perlahan mengejar ketinggalan dengan menggabungkan lebih sedikit rilis sekaligus (<=5 versi minor), sambil menguji di setiap langkah.
Misalnya, jika sublevel versi kernel perangkat adalah 4.14.100 dan sublevel stabil upstream adalah 4.14.155, sebaiknya gabungkan dalam penambahan kecil untuk memastikan volume perubahan yang wajar dapat ditinjau dan diuji secara memadai.
Secara umum, kami mendapati bahwa bekerja secara bertahap dalam batch <=5 rilis minor per penggabungan memastikan kumpulan patch yang lebih mudah dikelola.
Pengujian
Pengujian booting cepat
Untuk melakukan pengujian booting cepat, Anda harus menggabungkan perubahan LTS secara lokal terlebih dahulu dan mem-build kernel. Langkah-langkah berikut menjelaskan proses pengujian booting cepat.
Hubungkan perangkat target ke komputer menggunakan kabel USB, lalu kirim .ko ke perangkat menggunakan Android Debug Bridge (adb).
adb root
adb disable-verity
adb reboot
(wait for device boot-to-home)adb root
adb remount
adb push *.ko vendor/lib/modules/
adb reboot bootloader
Boot dtbo dan sideload image kernel.
fastboot boot --header-version=2 Image.lz4 (redo again if device rebooted)
Periksa log /dev/kmsg untuk menemukan error.
adb shell
su
cat /dev/kmsg (inspect kernel log for obvious new errors)
Pengujian Android
Pertama-tama, build image -userdebug secara lokal dengan kernel dan modul LTS baru.
Periksa /dev/kmsg
untuk menemukan error dan pastikan tidak ada error sebelum
melanjutkan. Uji hal-hal berikut untuk memastikan semuanya berfungsi seperti yang diharapkan.
- Kecepatan Wi-Fi
- Browser Chrome
- Perekaman gambar dan video dengan aplikasi kamera
- Pemutaran video YouTube dengan speaker bawaan dan headset Bluetooth
- Panggilan melalui jaringan operator
- Panggilan video melalui Wi-Fi
Suite pengujian otomatis
Verifikasi akhir untuk memastikan image produk tidak mengalami regresi dilakukan menggunakan rangkaian pengujian yang tersedia melalui rangkaian pengujian vendor (VTS) dan pengujian stres stabilitas otomatis.