Patches ro.build.version.security_patch to match the pending OTA package so the
system update can proceed. Works with both KernelSU and Magisk.
Rooted devices running incremental OTA updates may fail verification if the
current SPL doesn't match the update payload. Common causes: custom kernels,
patched init_boot, slot switches, or factory images with different patch
levels.
- Download
spl_fix-v*.zipfrom Releases - Open KernelSU / Magisk Manager
- Modules → Install from storage → select the zip
No reboot required.
Action button (recommended):
- Download the OTA update first (Settings → System → System Update → Download)
- Tap the module's action button in KSU / Magisk Manager
- When you see
Patched xxx -> xxx, proceed with the system update
Manual:
su -c sh /data/adb/modules/spl_fix/fix.shaction.sh works the same way.
Remove the module from the manager. The uninstall script restores the original SPL.
| File | Description |
|---|---|
module.prop |
Module metadata |
action.sh |
Main logic — detect and patch SPL |
fix.sh |
Convenience wrapper for manual invoke |
uninstall.sh |
Restores original SPL on removal |
.gitignore |
Git ignore rules |
.ignore |
fd/rg ignore rules |
SPL detection sources (tried in order):
/data/ota_package/metadata.pb— strings scan forYYYY-MM-DDlogcat -s update_engine:E— same pattern- Full logcat —
Target build SPL <date>pattern
Flow:
Detect target SPL → Compare with current → Save original → resetprop → Verify
--no SPL found--: prompts user to download the OTA first--already matching--: exits with no changes--mismatch--: saves current value tooriginal_spl, then patchesuninstall.shrestores fromoriginal_spland removes the file
Auto-switches based on $KSU:
| Variable | KernelSU | Magisk |
|---|---|---|
$KSU |
true |
unset |
| resetprop | /data/adb/ksu/bin/resetprop |
built-in resetprop |
| description | ksud module config set |
unavailable, skip |
GPL-3.0-or-later © 2026 MysticalDevil