Skip to content

wlan: wmi: accept legacy GTK status event prefix - #22

Open
CeRRiLLo89 wants to merge 226 commits into
crdroidandroid:16.0-raphaelfrom
CeRRiLLo89:backport-gtk-16.0-raphael
Open

wlan: wmi: accept legacy GTK status event prefix#22
CeRRiLLo89 wants to merge 226 commits into
crdroidandroid:16.0-raphaelfrom
CeRRiLLo89:backport-gtk-16.0-raphael

Conversation

@CeRRiLLo89

Copy link
Copy Markdown
Contributor

Backport of #21 to the raphael-specific kernel branch actually consumed by the device tree.

The raphael dependency graph currently selects android_kernel_xiaomi_sm8150:16.0-raphael, while #21 was merged only into generic 16.0. The GTK parser in 16.0-raphael therefore still contains the old full-struct length check.

This applies the exact #21 change. The pre-patch file on 16.0-raphael is byte-identical to the file at #21's original base, so this is a direct backport with no adaptation.

Validation:

  • exact base c90639a8c2bb123119e4011f96a0768368dc8deb was used for the 03/08 local full crDroid build with this patch integrated; build completed successfully
  • on-device exact-build patched kernel: zero GTK parser/extraction failures vs at least 130 with original kernel
  • Wi-Fi, suspend/WoW, push, mobile data, calls, KernelSU/SUSFS and rmnet_perf remained operational

Original PR: #21

DD3Boh and others added 30 commits June 2, 2026 19:51
Change-Id: I3bbfd60dfa0dea0abf080d35fd3d6d14dec6e094
Signed-off-by: firebird11 <hbgassel@gmail.com>
Change-Id: I8a757f09beede0238c7ac53627382a4c81d54509
Signed-off-by: firebird11 <hbgassel@gmail.com>
Change-Id: I25959ef7eec025a5506cb6de863c09555a1dd4ce
Signed-off-by: firebird11 <hbgassel@gmail.com>
Change-Id: I22b3d3adf31c95a91275d0c795403b4097201430
Signed-off-by: firebird11 <hbgassel@gmail.com>
Change-Id: Ib7eb7141986625b0d01f989ae00493ddc3c4a9b8
Signed-off-by: firebird11 <hbgassel@gmail.com>
Change-Id: If2d1802f013ea3a549868b2f280d4f4b63ed49f2
Signed-off-by: firebird11 <hbgassel@gmail.com>
Change-Id: Iadb079c5f1d654226276dd1d316e324968fa1e92
Signed-off-by: firebird11 <hbgassel@gmail.com>
* From cepheus-q-oss + vayu-r-oss + nabu-r-oss

Change-Id: I6774472882f5d402718724ae6c78b3605fd293c0
Signed-off-by: firebird11 <hbgassel@gmail.com>
…dio drivers

Change-Id: Icb4ca6cadf5caed7d79dd04a4291fee98d4dca35
Signed-off-by: firebird11 <hbgassel@gmail.com>
* Extracted from stock dtbo

Change-Id: I79733a52cddc8bb011ef679bf317babb5055fe0f
Signed-off-by: firebird11 <hbgassel@gmail.com>
nabu doesn't have fingerprint, thanks Xiaomi

Change-Id: Ide1fa63add29925e219f7b8c88d0ff225b9b11d4
Signed-off-by: firebird11 <hbgassel@gmail.com>
Change-Id: I25159512098a4af867382e81d03f46b509e3763e
Signed-off-by: firebird11 <hbgassel@gmail.com>
Change-Id: I19de141ce55d00ea1af4473025e35e1049ede365
Signed-off-by: firebird11 <hbgassel@gmail.com>
Change-Id: Ic287243d1ea995dc014f1e57f828d2e5ac09f0f9
Signed-off-by: firebird11 <hbgassel@gmail.com>
Change-Id: Id266a34b20403a9f3ef445902730f293712bf260
Signed-off-by: firebird11 <hbgassel@gmail.com>
Change-Id: I0a707338911a937afe1bdb4562da1ef102c5a59e
Signed-off-by: firebird11 <hbgassel@gmail.com>
Change-Id: I630f67c0d2ec1537ef236fb8363ee84f13e953d4
Signed-off-by: firebird11 <hbgassel@gmail.com>
Change-Id: I974643cb245f76e66b208f7e18601cbb3d90ae62
Signed-off-by: firebird11 <hbgassel@gmail.com>
Change-Id: I7e8562ed3eda675d160d6dabee7e568a1a72e849
Signed-off-by: firebird11 <hbgassel@gmail.com>
Change-Id: Id670875adc18659521c424a716cf0ef194f9627f
Signed-off-by: firebird11 <hbgassel@gmail.com>
Change-Id: Ifab7f9b0a7fbe5846c24c611a16cfcb7f29684dc
Signed-off-by: firebird11 <hbgassel@gmail.com>
Change-Id: Id29333eb3b5282b25c52ff14492622bd12e1ee79
Signed-off-by: firebird11 <hbgassel@gmail.com>
Change-Id: I5559a9cfe00af58847e089764452a24c39830e20
Signed-off-by: firebird11 <hbgassel@gmail.com>
Change-Id: If60a789b666cd2c5ab767406d2aeabb03f38ba5b
Signed-off-by: firebird11 <hbgassel@gmail.com>
Change-Id: I185253d2dab8f4f88b38e95e5ac2332667b6a011
Signed-off-by: firebird11 <hbgassel@gmail.com>
Change-Id: I225b36292f96eafb0703e3f0701f924f20b186d5
Signed-off-by: firebird11 <hbgassel@gmail.com>
Change-Id: I5b25d19fab3a2901948d639c785165e70786f4ab
Signed-off-by: firebird11 <hbgassel@gmail.com>
 * Another stage should be added, otherwise fingerprint payment won't work in some apps
 like Alipay and Jingdong.

Change-Id: Ibbd928b6d75c17f9c6c2e8b6f72b2d17aa48eb94
Signed-off-by: firebird11 <hbgassel@gmail.com>
…proper place

Change-Id: Ia8a6cd27fbf63aeadbe2577cfb56b9d56fe0687c
Signed-off-by: firebird11 <hbgassel@gmail.com>
…bm commands

Change-Id: If7d461b5f0a02118c5307b962a507269e1fdce71
Signed-off-by: firebird11 <hbgassel@gmail.com>
sidex15 and others added 29 commits July 11, 2026 11:40
…n_path loop

- Using fsnotify should be more reliable and consuming less CPU resources as it is event-driven.
- We should watch the underlying /data/media/0 instead of the FUSE /sdcard as fuse is likely not compatible with fsnoitfy.
- The mask should be at least (FS_EVENT_ON_CHILD | FS_ISDIR | FS_OPEN_PERM) as we are targeting for folder "Android".
- For proper cleanup we can use fsnotify_destroy_group() API to help us do all the things.
- Backported to non-gki using `.handle_event` and `fsnotify_add_mark` instead of `.handle_inode_event` and `fsnotify_add_inode_mark`

Co-authored-by: sidex15 <24408329+sidex15@users.noreply.github.com>
Co-authored-by: simonpunk <simonpunk2016@gmail.com>
Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>
Signed-off-by: firebird11 <hbgassel@gmail.com>
…d persistently

- Since mnt_alloc_group_id() will unlikely get called again after users unlock the device screen, and clone_mnt() rarely call mnt_alloc_group_id() to get new mnt_group_id as well, so basically it will not take any more resources after init and zygote process have fully initialized their jobs, and hence we can persistently check for new mounts mounted by ksu domain and assign sus mnt_group_id.
- Also there is no need to use another ida for sus mnt_group_id, we can just re-use the default mnt_group_ida and use ida_alloc_min() to assign the sus mnt_group_id, so that we can as well remove the hook in mnt_release_group_id().

co-authored by: simonpunk <simonpunk2016@gmail.com>

Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>
Signed-off-by: firebird11 <hbgassel@gmail.com>
susfs_handle_sdcard_inode_event() is a fsnotify handler that runs inside an SRCU read section
(srcu_read_lock(&fsnotify_mark_srcu) held by fsnotify()).
Calling msleep(5000) blocks the SRCU section, and fsnotify_destroy_group() calls synchronize_srcu() on the
same SRCU struct waiting for its own thread to release the read lock. This leads to perm self-deadlock.

The deadlock fires once per boot when the "Android" directory under /data/media/0 is first accessed.
From that point, the fsnotify mark reaper workqueue is permanently stuck. All subsequent inotify fd closes
during process exit block in __flush_work, creating D-state threads that prevent zombie reaping.

Fix by deferring all blocking work to a delayed_work item on system_unbound_wq. The handler now only checks
the filename and schedules deferred cleanup — no blocking, no synchronize_srcu.

The 5-second delay is preserved via queue_delayed_work(5*HZ).

test_and_set_bit ensures the cleanup is scheduled exactly once. The filename check must come before the atomic
guard or else non-matching events on a busy /data/media/0 claim the bit first and the actual "Android" event
is dropped.

co-authored by: Ikypiky <ikypiky23@gmail.com>

Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>
Signed-off-by: firebird11 <hbgassel@gmail.com>
The kernel does not provide a way to protect the working set under memory
pressure. A certain amount of anonymous and clean file pages is required by
the userspace for normal operation. First of all, the userspace needs a
cache of shared libraries and executable binaries. If the amount of the
clean file pages falls below a certain level, then thrashing and even
livelock can take place.

The patch provides sysctl knobs for protecting the working set (anonymous
and clean file pages) under memory pressure.

The vm.anon_min_kbytes sysctl knob provides *hard* protection of anonymous
pages. The anonymous pages on the current node won't be reclaimed under any
conditions when their amount is below vm.anon_min_kbytes. This knob may be
used to prevent excessive swap thrashing when anonymous memory is low (for
example, when memory is going to be overfilled by compressed data of zram
module). The default value is defined by CONFIG_ANON_MIN_KBYTES (suggested
0 in Kconfig).

The vm.clean_low_kbytes sysctl knob provides *best-effort* protection of
clean file pages. The file pages on the current node won't be reclaimed
under memory pressure when the amount of clean file pages is below
vm.clean_low_kbytes *unless* we threaten to OOM. Protection of clean file
pages using this knob may be used when swapping is still possible to
  - prevent disk I/O thrashing under memory pressure;
  - improve performance in disk cache-bound tasks under memory pressure.
The default value is defined by CONFIG_CLEAN_LOW_KBYTES (suggested 0 in
Kconfig).

The vm.clean_min_kbytes sysctl knob provides *hard* protection of clean
file pages. The file pages on the current node won't be reclaimed under
memory pressure when the amount of clean file pages is below
vm.clean_min_kbytes. Hard protection of clean file pages using this knob
may be used to
  - prevent disk I/O thrashing under memory pressure even with no free swap
    space;
  - improve performance in disk cache-bound tasks under memory pressure;
  - avoid high latency and prevent livelock in near-OOM conditions.
The default value is defined by CONFIG_CLEAN_MIN_KBYTES (suggested 0 in
Kconfig).

Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>
Signed-off-by: firebird11 <hbgassel@gmail.com>
Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>
Signed-off-by: firebird11 <hbgassel@gmail.com>
 - Fix several race issues by using proper locks:
   down_read(&namespace_sem); // needed when manipulating mnt_namespace
   lock_ns_list(mnt_ns); // needed when traversing mnt_ns->list
   lock_mount_hash(); // needed when modifying mount
 - In the end, the mnt_id is not guaranteed to allocated sequentially for a namespace, this happens even on newer stock locked devices, and mnt_group_id gap is the only one we really need to care for, real world apps should not rely on mnt_id gaps for root detections.
 - Re-use the mnt_id_ida to assign fake mnt_id with the minimum mnt_id set to DEFAULT_UNSHARE_KSU_MNT_ID (default 400000) for mounts unshared by ksu process and DEFAULT_KSU_MNT_ID (default 500000) for mounts created or single cloned by ksu process, so we no longer need to hook mnt_free_id().

 - For global susfs bool variables, use WRITE_ONCE() and READ_ONCE() to ensure the atomicity.
 - For global susfs char variables, use seqlock for frequently read and rarely write, but need no irq.
 - Add susfs_is_current_proc_umounted_app(), used to check if current proc is marked umounted and current uid >= 10000. Most of the time we should use this now to apply on app uid only, and use susfs_is_current_proc_umounted() only for sucampat check.
 - Check for null of all inode->i_state.

Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>
Signed-off-by: firebird11 <hbgassel@gmail.com>
…tream (backport)

Only modification for this is to use the `inode->i_state` instead of `inode->i_mapping->flags` as some features doesn't work on non-gki.

reference: https://gitlab.com/simonpunk/susfs4ksu/-/commits/gki-android12-5.10?ref_type=heads
Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>
Signed-off-by: firebird11 <hbgassel@gmail.com>
!!! This commit requires the updated ksu_susfs binary !!!

- Remove unused member in "strcut st_susfs_sus_path" and "struct st_susfs_sus_path_list".

- Better logging in susfs_add_sus_path_loop() and susfs_run_sus_path_loop().

Co-Authored by: simonpunk <simonpunk2016@gmail.com>

Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>
Signed-off-by: firebird11 <hbgassel@gmail.com>
…susfs binary !!!

- Use RCU to read and modify SUS_KSTAT_HLIST.

- Reorder struct st_susfs_sus_kstat and add new flags member to determine for which stat attribute to spoof.

- Rename and refine "void susfs_sus_ino_for_show_map_vma(unsigned long ino, dev_t *out_dev, unsigned long *out_ino);" => "void susfs_show_map_vma_spoofer(struct inode *inode, dev_t *out_dev, unsigned long *out_ino);".

- Rename and refine "void susfs_sus_ino_for_generic_fillattr(unsigned long ino, struct kstat *stat);" => "void susfs_generic_fillattr_spoofer(struct inode *inode, struct kstat *stat);".

- Add one more hook in vfs_getattr_nosec() as it is needed to spoof for some FS like FUSE.

Co-Authored by: simonpunk <simonpunk2016@gmail.com>

Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>
Signed-off-by: firebird11 <hbgassel@gmail.com>
…e susfs_mnt_id_ida and susfs_mnt_group_ida to completely isolate the mnt_id assigment for normal mounts and sus mounts to get rid of any possible mnt_id collision even it seems not to. Mounts that are unshared by ksu process will have the sus bit VFSMOUNT_MNT_FLAGS_KSU_UNSHARED_MNT (0x80000000) set on mnt->mnt.mnt_flags, and old mnt_id will be re-used for the new sus mnt_id. And the good thing is we still do not need extra kabi member for this.

- More optimization on fs/notify/fdinfo.c, fs/statfs.c, and fs/proc/fd.c: add null check for mnt and mnt->mnt_parent, fix missing path_put on path in inotify_fdinfo(), and replace susfs_is_current_proc_umounted_app() with susfs_is_current_proc_umounted().

- Add new functions: susfs_get_non_sus_mnt_from_mnt() and susfs_get_non_sus_vfsmnt_from_vfsmnt() in fs/namespace.c which are used in fs/proc/fd.c and fs/statfs.c, these two functions will deal with the locks and race issues, as well as remove the need of including "mount.h" in fs/statfs.h which somehow bootloops when booting into the recovery on some devices with 6.12 kernel.

Co-Authored by: simonpunk <simonpunk2016@gmail.com>

Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>
Signed-off-by: firebird11 <hbgassel@gmail.com>
Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>
Signed-off-by: firebird11 <hbgassel@gmail.com>
* rework of sus_kstat
* rework of open_redirect
* it is still using `inode->i_state`
 instead of `inode->i_mapping->flags` on offical/gki upstream susfs

Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>
Signed-off-by: firebird11 <hbgassel@gmail.com>
…ry allocation

- For OPEN_REDIRECT, there is no need to do put_unused_fd() again. Also rename function signature "int susfs_open_redirect_spoof_do_sys_openat(struct inode *inode, struct filename **tmp_filename);" to "struct filename *susfs_open_redirect_spoof_do_sys_openat(struct inode *inode);".
- For OPEN_REDIRECT, use `goto out;` instead of having `kfree(tmp);` and `return len;` on `base.c`. This will fix the kernel panic, system crashes, and force reboot triggered on some apps after using OPEN_REDIRECT.
- For memeory allocation in fs/susfs.c, we should use kzalloc() to allocate new memory or explictly zero out the last char buffer after strncpy() if buffer is allocated via kmalloc().
- Use PRE_CHECK_SUS_MAP(inode) macro to reduce tedious repeated code
- Sync Some SUS_MAP Code from upstream

Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>
Signed-off-by: firebird11 <hbgassel@gmail.com>
Induced header linux/stat.h so that there is a definition for 'struct kstat'. Otherwise this is implicitly declared below as a parameter in a declaration for 'susfs_generic_fillattr_spoofer' (previously called susfs_sus_ino_for_generic_fillattr'.

This causes a compiler problem with your driver at this file:
https://github.com/sidex15/KernelSU-Next/blob/legacy-susfs-v2/kernel/supercall/dispatch.c

It complains that the included file susfs.h has an implicit declaration for 'struct kstat' and that this declaration will not be visible outside of the declaration for 'susfs_generic_fillattr_spoofer'

Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>
Signed-off-by: firebird11 <hbgassel@gmail.com>
As per this commit: sidex15/android_kernel_lge_sm8150@9051376

- Rename and refine "void susfs_sus_ino_for_show_map_vma(unsigned long ino, dev_t *out_dev, unsigned long *out_ino);" => "void susfs_show_map_vma_spoofer(struct inode *inode, dev_t *out_dev, unsigned long *out_ino);".

- Rename and refine "void susfs_sus_ino_for_generic_fillattr(unsigned long ino, struct kstat *stat);" => "void susfs_generic_fillattr_spoofer(struct inode *inode, struct kstat *stat);".

2 lines were missed.

Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>
Signed-off-by: firebird11 <hbgassel@gmail.com>
…IRECT - When replacing the old entry with the new entry for the hash table, it should happen in the same lock section.

- Use hash_for_each_possible_safe() instead of hash_for_each_possible() for entry deletion.

- Fix some logic bugs of susfs_update_sus_kstat().

Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>
Signed-off-by: firebird11 <hbgassel@gmail.com>
Since all susfs features are done in sleepable context, so intead we can use mutex lock
 here because the overhead is way cheaper then spinlock.

Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>
Signed-off-by: firebird11 <hbgassel@gmail.com>
…possible_rcu()

- Since we have passed inode->i_ino in hash_for_each_possible_rcu() already, it will get us all the entries that
 have the matched ino, so there is no need to do extra entry->target_ino
 comparison.

Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>
Signed-off-by: firebird11 <hbgassel@gmail.com>
- In susfs_set_cmdline_or_bootconfig(), if it fails to allocate memory for info,
 when it goes to label out_copy_to_user, it will deference the null pointer
 from info.

Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>
Signed-off-by: firebird11 <hbgassel@gmail.com>
Prevent... kernel: Fix fuse path leaking from getdents/readdir syscall variants; Prevent dentry creation for fake_qstr

    - Since ilookup() cannot retrieve the inode from FUSE, so we use its underlying super_block from "/data" path instead.

    - If the looked up path is sus, its fs type is FUSE, the lookup flag is (LOOKUP_CREATE | LOOKUP_EXCL), and the target app uid has full file access granted, then at least we prevent the dentry creation for the fake_qstr, even though it is futile to do this, it is like better than doing nothing.

Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>
Signed-off-by: firebird11 <hbgassel@gmail.com>
- Re-use the existing ida to assign the sus mnt_id/mnt_group_id, this will help allocating
 and freeing sus id a bit faster as there are less hooks in mnt_free_id() and
 mnt_release_group_id().

Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>
Signed-off-by: firebird11 <hbgassel@gmail.com>
- The more paths added to sus_path_loop, the longer it takes to re-flag each sus
 paths, if we doing it after "do_umount:" in the same thread, it will block
 and hence the risk of exposing to time side channel attack. However,
 re-flagging all sus paths is not a critical task after all, so to address
 this issue we can defer susfs_run_sus_path_loop() to a workqueue and let the
 background kernel worker thread to do the job for us.

Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>
Signed-off-by: firebird11 <hbgassel@gmail.com>
Tiniest of things and there will obviously be several larger official SUSFS things to adapt, but I spent ages trying to work out why the sdcard_monitor function was exiting as not su... Turns out KSU & SUSFS official (and your fork) have changed the su domain to 'ksu' and so that needs changed here to match and then it works fine without further changes; there probably are further changes/optimizations but this quickly restores it to working again!

I couldn't find many other instances of hardcoding a context like this in the other files, other than with AVC spoofing 'u:r:priv_app:s0:c512,c768' and so unless they suddenly feel the need to rename init, zygote or priv_app, I doubt it's likely to be a problem in future!

Feel free to close this without merging as I'm sure you don't need a one character commit, but just to make you aware 😊

Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>
Signed-off-by: firebird11 <hbgassel@gmail.com>
- Change to hide all sus map entries as well as the statistics from maps instead of spoofing them as anon entries, since it is futile against prctl syscall passed with the cmd PR_SET_VMA, though normally apps unlikely test each anon entry, but it still worth doing so and at least it can save us some cpu cycles.

- Check before each smap_gather_stats() calls and skip incrementing the mss if matched entry is found.

- In pagemap_read(), instead of setting pm.buffer->pm to 0, we should check the vma fist before calling walk_page_range(), and skip walking the page and writing to pm if matched entry is found.

- To be more efficient, we hook __access_remote_vm() instead of mem_rw().

- There are still various syscalls that can be used to detect the spoofing, but it should be enough for most of the cases for now.

Co-authored-by: simonpunk <simonpunk2016@gmail.com>
Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>
Signed-off-by: firebird11 <hbgassel@gmail.com>
- For detail issue please see cctv18/susfs4oki#1 and cctv18/susfs4oki#2

- If the parent path is NOT accessible from the user apps, the may_lookup() in link_path_walk() may retun errno other than -ENOENT, therefore we should check the parent path before may_looup().

Co-authored-by: simonpunk <simonpunk2016@gmail.com>
Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>
Signed-off-by: firebird11 <hbgassel@gmail.com>
One thing to note here that the mnt id and mount Default DEFAULT_KSU_MNT_ID and DEFAULT_KSU_MNT_GROUP_ID are still in 500k and 5000 respectively.

Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>
Signed-off-by: firebird11 <hbgassel@gmail.com>
This feature is based on the susfs v1.3.8 and ported to the recent susfs v2.2.0 codebase.

This is highly experimental so put this feature with so much grain of salt...

I haven't test it yet as I don't have memfd: mappings in /proc/maps but the execution via userspace binary works.

Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>
Signed-off-by: firebird11 <hbgassel@gmail.com>
Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>
Signed-off-by: firebird11 <hbgassel@gmail.com>
The GTK status parser requires the complete modern fixed parameter, although it only consumes the prefix through replay_counter.

Validate both the event length and the TLV-declared length against the prefix actually consumed by the parser, while continuing to reject truncated events.

Tested on raphael:
- original kernel: at least 130 GTK length and extraction failures
- patched kernel: zero GTK parser and extraction failures
- Wi-Fi, suspend/WoW, push, mobile data, calls, KernelSU/SUSFS and  rmnet_perf remained operational
- no panic, Oops or module-signature failures

ICNSS suspend_noirq -EAGAIN remains a separate issue.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.