No description
Find a file
Eric Biggers 843f46e674 init.rc: disable kernel module autoloading
There is a longstanding bug where file-based encryption causes spurious
SELinux denials of module_request because it uses the kernel's crypto
API, and the crypto API tries to autoload kernel modules.

While this sometimes indicate missing kconfig options, it can still
happen even if all needed kconfig options are enabled.  This is because
a crypto algorithm can be a composition like "hmac(sha512)", and the
crypto API will first look for the full composition before it
instantiates it using the components like "hmac" and "sha512".  But
often an implementation of the full composition doesn't exist.

However, as far as I can tell, Android doesn't actually use kernel
module autoloading at all.  First, Android never changes
/proc/sys/kernel/modprobe from the default of "/sbin/modprobe", yet this
isn't where modprobe is located on Android.  Android's SELinux policy
contains a neverallow rule that ensures that only init (not even
vendor_init) can write to this setting, so vendors can't be changing it.

Vendors could potentially be setting CONFIG_STATIC_USERMODEHELPER_PATH,
which overrides the path of all usermode helpers including modprobe.
But this is a relatively new kconfig option, available only in
android-4.14 and later.  Also, for a vendor to actually do this they'd
also need to extend the SELinux policy with a domain_auto_trans rule to
allow their usermode helper to be executed by the kernel.

Android does increasingly use kernel modules, and GKI (Generic Kernel
Image) will require them.  However, the modules are actually inserted by
userspace by 'init', not autoloaded.

It's possible to disable kernel module autoloading completely by setting
/proc/sys/kernel/modprobe to an empty string.  So, let's do that.

This prevents lots of spurious SELinux denials, and allows removing
unnecessary rules to allow or dontaudit the module_request permission.

Note: when the kernel doesn't have CONFIG_ANDROID_BINDERFS enabled, this
change exposes a kernel bug that causes a WARNING in get_fs_type().  To
avoid this WARNING, a kernel fix should be applied too -- currently
under discussion upstream
(https://lkml.kernel.org/r/20200310223731.126894-1-ebiggers@kernel.org).

Bug: 130424539
Bug: 132409186
Bug: 144399145
Bug: 146477240
Bug: 148005188
Bug: 149542343

Test: Tested on cuttlefish and coral:

    - Checked that /proc/sys/kernel/modprobe contains /sbin/modprobe
      before this change, and the empty string after.

    - Checked that if all SELinux rules for module_request are removed,
      there are SELinux denials for module_request before this change
      but none after.

    - Ran lsmod both before and after and verified that the list is the
      same, i.e. checked that this change doesn't break how Android
      actually loads kernel modules.

Change-Id: I4132fe1a491e7b789311afcf693c1f6493fb9dc5
2020-03-11 10:01:32 -07:00
adb don't include liblog to APEXes 2020-03-11 09:20:08 +00:00
base libbase uses liblog symbols via dlsym when it is built for APEX 2020-03-11 07:53:23 +00:00
bootstat bootstat: enhance last reboot reason property with file backing 2020-02-14 13:24:16 -08:00
cli-test cli-test: a tool for testing command-line programs. 2019-12-13 12:23:51 -08:00
code_coverage build code_coverage.policy with Android.bp 2020-02-11 10:33:38 -08:00
cpio Switch from dist-for-goals to dist in Android.bp 2018-11-19 23:06:12 -08:00
debuggerd Merge "debuggerd: add an opt-out for OEMs that would rather collect core dumps." 2020-03-06 17:17:51 +00:00
deprecated-adf remove deprecated bp 'subdirs' 2020-01-14 12:18:40 -08:00
diagnose_usb Build adbd for recovery 2018-05-24 14:11:11 +09:00
fastboot fastbootd: use FastbootDevice::GetCurrentSlot to get current slot suffix 2020-03-02 13:14:11 -08:00
fs_mgr Merge changes from topic "no_snapshot_callstack" 2020-03-10 17:08:54 +00:00
gatekeeperd Use optional for nullable types 2020-02-24 09:31:47 +09:00
healthd Add UNSUPPORTED to health HAL 2.1 values 2020-02-15 16:51:02 -08:00
include Move android_filesystem_config.h => fs_config.h 2017-08-02 16:31:19 -07:00
init Revert "init: handle property service callbacks asynchronously" 2020-03-10 11:53:11 -07:00
janitors Add the two best build system janitors. 2019-03-25 10:25:13 -07:00
libappfuse Close /dev/fuse FD before calling onClosed 2019-05-31 17:06:52 +01:00
libasyncio Revert "Mark libs as double_loadable" 2019-03-11 14:10:34 +00:00
libbacktrace Whole static link libasync_safe to libbacktrace.a 2020-03-11 07:55:23 +00:00
libbinderwrapper Make libbinderwrapper available in /vendor partition 2018-04-06 08:41:21 +09:00
libcrypto_utils Set apex_available property 2020-03-09 16:38:02 +09:00
libcutils Merge "adbd: make libadbd_services cc_library again." 2020-03-10 18:43:30 +00:00
libdiskconfig Rename target.linux[_x86[_64]] to target.linux_glibc[_x86[_64]] 2017-10-02 10:44:29 -07:00
libgrallocusage Replace -Weverything with -Wextra 2019-11-08 13:09:00 -08:00
libkeyutils Refactor mini-keyctl and split a static library 2019-09-26 10:45:38 -07:00
liblog don't include liblog to APEXes 2020-03-11 09:20:08 +00:00
libmodprobe libmodprobe: parse kernel command line for module options 2019-12-27 13:39:23 -08:00
libnetutils add nodad argument to ifc_act_on_address() and add it to header file 2020-01-26 06:35:30 -08:00
libpackagelistparser Add require_root to adbd_test and libpackagelistparser_test 2019-09-24 09:13:32 -07:00
libpixelflinger Mark gglMulx and gglMulAddx as always_inline 2019-02-14 11:59:48 -08:00
libprocessgroup Convert vts configs to Android.bp 2020-03-07 21:21:33 -08:00
libprocinfo libprocinfo: remove error msg for unknown process state. 2020-01-17 15:55:13 -08:00
libqtaguid Redirect qtaguid native call to netd fwmark client 2017-11-09 18:02:22 -08:00
libsparse Make ramdisk_available. 2020-01-22 16:47:14 -08:00
libstats don't include liblog to APEXes 2020-03-11 09:20:08 +00:00
libsuspend Remove libsuspend from VNDK. 2018-08-14 13:39:55 -07:00
libsync libsystem/libsync: Update OWNERS 2020-02-28 10:50:50 -08:00
libsystem Set apex_available property 2020-03-09 16:38:02 +09:00
libsysutils Allow apexes to link against more libs 2020-02-14 10:41:15 -08:00
libunwindstack Remove mips build. 2020-03-06 22:02:09 -08:00
libusbhost Prevent infinite loop on zero length USB descriptors 2020-02-21 11:11:02 -08:00
libutils Set apex_available property 2020-03-09 16:38:02 +09:00
libvndksupport remove deprecated bp 'subdirs' 2020-01-14 12:18:40 -08:00
libziparchive Create an interface for the cd entry hash table 2020-03-10 11:51:53 -07:00
llkd Merge changes Ibb4b4ca4,I31572afa 2020-01-17 15:39:45 +00:00
logcat logcat: add 'device shut down' to error message upon EOF 2020-02-14 10:10:44 -08:00
logd logd: don't coalesce identical log messages in the security buffer 2020-02-20 13:21:51 -08:00
logwrapper logwrap: add missing O_CLOEXEC 2020-02-26 10:29:04 -08:00
property_service Rename ro.device_owner system property 2020-02-19 10:34:36 +00:00
qemu_pipe Build adbd for recovery 2018-05-24 14:11:11 +09:00
reboot adb: replace reboot service with exec of /system/bin/reboot. 2019-10-23 14:33:36 -07:00
rootdir init.rc: disable kernel module autoloading 2020-03-11 10:01:32 -07:00
run-as run-as: improve error messages. 2020-03-04 18:11:18 -08:00
sdcard Move layout_version to /data/misc/installd 2019-08-21 10:12:18 -07:00
set-verity-state set-verity-state: Link to libfs_mgr_binder. 2019-12-30 13:42:57 -08:00
shell_and_utilities Update shell_and_utilities docs for R. 2020-01-16 15:54:16 -08:00
storaged storaged:Thread out of sync will cause null pointer crash 2020-02-11 16:03:41 +08:00
toolbox toolbox: add modprobe 2019-08-06 13:58:13 -07:00
trusty trusty: keymaster: Remove legacy support 2020-02-26 00:43:23 +00:00
usbd Remove libhwbinder/libhidltransport deps 2019-09-05 14:17:42 -07:00
watchdogd Move watchdogd out of init 2018-08-02 12:25:58 -07:00
.clang-format Add a 2 width option of clang format. 2017-03-10 13:01:39 -08:00
.clang-format-2 Move clang-formats to build. 2019-01-18 14:26:33 -08:00
.clang-format-4 Move clang-formats to build. 2019-01-18 14:26:33 -08:00
.gitignore Ignore adb/*.pyc files 2015-08-11 12:59:58 -07:00
Android.bp remove deprecated bp 'subdirs' 2020-01-14 12:18:40 -08:00
CleanSpec.mk snapshotctl don't auto-merge. 2020-03-03 13:19:49 -08:00
MODULE_LICENSE_APACHE2 auto import from //depot/cupcake/@135843 2013-07-30 13:56:49 -07:00
NOTICE Fix omission in NOTICE file. 2013-07-30 13:56:55 -07:00
OWNERS Move per-file OWNERS directives to their directories. 2018-06-06 11:49:40 +09:00
PREUPLOAD.cfg Add a PREUPLOAD.cfg file to run git-clang-format on every commit 2017-03-08 16:51:26 +08:00
TEST_MAPPING Add adb_pairing* tests to TEST_MAPPING. 2020-02-21 16:06:27 -08:00