[E 2015 Original Android Development] squid2:
Squid Kernel r19

This is a pretty big release. The headline change is added support for Nougat ROMs. This kernel is still backwards compatible with Marshmallow ROMs. I also updated to newer compiler (Linaro GCC 6.2.1). However, there are a bunch of improvements beyond just catching up the the CyanogenMod 14.1 kernel.

Updated zRAM

I've updated zRAM to be mostly in sync with Linux 4.9. The main change is the adoption of what is called "per-cpu compression". Essentially, instead of having a fixed number of compression threads spread across all CPU cores that are moved around by the scheduler, there is one dedicated compression stream per online CPU core. Enforcing that compression streams stay fixed on a particular CPU improves caching performance and reduces overhead. Also, compression streams are now automatically added/removed as CPU cores are onlined/offlined. These changes improve zRAM performance by a few percentage points.

Updated FUSE

I've cherry-picked a patch series from CAF improving FUSE, the mechanism that facilitates implementing file systems in userspace. Android uses FUSE for SD cards (when not using esdfs or sdcardfs, as is the case on CM13). One improvement I improved is called writeback caching. Traditionally, when writing to a fuse device, the kernel passes data up to the fuse daemon one (128K) chunk at a time, and write() system calls don't complete till all the chunks are passed to fuse. Now, writes are cached in kernel, allowing write() to return more quickly, and fuse then gets cached chunks at its own pace without blocking the write() system call. The other improvement is called "short-circuiting", which allows the fuse userspace to instruct the kernel driver to perform certain IO operations directly, bypassing the userspace daemon. This can reduce overhead and latency. The FUSE changes in this release likely won't be hugely noticeable given the bottleneck is usually the slow speed of SD cards, but there should be some improvement.

Security Improvements

As usual, I incorporated all the security patches that made it into the CM/LineageOS kernel since the last release. However, I also scoured Kernel.org and CAF to bring in dozens more security fixes missing in the CM/LineageOS kernel. I plan to upstream the important fixes into the LineageOS kernel later when I get time.

In addition to the usual reactive security patches, this release also adds some basic exploit mitigations. Nougat introduced kernel address space layout randomization (KASLR) to increase the difficulty of exploitation. However, the kernel has traditionally had a ton of logging messages leaking memory addresses, making it ineffecive. Searching Kernel.org and CAF, I found a bunch more patches fixing kernel address leaks, making KASLR less useless. There are probably still some things that can leak addresses, and KASLR is implemented rather weakly, but something is better than nothing. Another exploit mitigation I added is support for the ARM PXN bit that can mark userspace code as not executable in kernel context. This prevents a class of exploits known as "return to user".

I also fixed an issue disconnecting from PPTP VPNs reported by [MENTION=4978031]spiked_mistborn[/MENTION]. It was a regression introduced by a mismerge I made in r17, leading to a double free.

For whatever reason, the XDA downloads tab appears blank when logged in with my user account, so I can’t upload to the usual spot right now. In the interim, I’ve posted a build to MediaFire: http://www.mediafire.com/file/hunyec9k4kkl4v4/squid_kernel_r19-surnia.zip

Finally, happy new year everyone!