f5ddc0444b
The property is set to inform kernel to do a warm_reset on the next reboot. This is useful to persist the logs to debug device boot failures. More details in http://go/rvc-ota-persist-logs. The property is set to 1 by update_engine after an OTA. And it's set to 0 by update_verifier or vold after we mark the current slot boot successful. The property is read by vendor_init. And according to its value, vendor_init writes a particular sysfs file to schedule a warm reset on the following reboot. Without the new context, the denial message says: [ 13.423163] audit: type=1107 audit(1746393.166:8): pid=1 uid=0 auid=4294967295 ses=4294967295 subj=u:r:init:s0 msg='avc: denied { read } for property=ota.warm_reset pid=0 uid=0 gid=0 scontext=u:r:vendor_init:s0 tcontext=u:object_r:default_prop:s0 tclass=file permissive=0' [ 23.096497] init: Unable to set property 'OTA.warm_reset' from uid:0 gid:2001 pid:841: SELinux permission check failed [ 23.096574] type=1107 audit(1573768000.668:42): uid=0 auid=4294967295 ses=4294967295 subj=u:r:init:s0 msg='avc: denied { set } for property=OTA.warm_reset pid=841 uid=0 gid=2001 scontext=u:r:update_verifier:s0 tcontext=u:object_r:default_prop:s0 tclass=property_service permissive=0' [ 23.108430] update_verifier: Failed to reset the warm reset flag Bug: 143489994 Test: check the property can be set by update_engine, and read by vendor_init Change-Id: I87c12a53a138b72ecfed3ab6a4d846c20f5a8484
39 lines
1.4 KiB
Text
39 lines
1.4 KiB
Text
# update_verifier
|
|
type update_verifier, domain;
|
|
type update_verifier_exec, system_file_type, exec_type, file_type;
|
|
|
|
# Allow update_verifier to reach block devices in /dev/block.
|
|
allow update_verifier block_device:dir search;
|
|
|
|
# Read care map in /data/ota_package/.
|
|
allow update_verifier ota_package_file:dir r_dir_perms;
|
|
allow update_verifier ota_package_file:file r_file_perms;
|
|
|
|
# Read /sys/block to find all the DM directories like (/sys/block/dm-X).
|
|
allow update_verifier sysfs:dir r_dir_perms;
|
|
|
|
# Read /sys/block/dm-X/dm/name (which is a symlink to
|
|
# /sys/devices/virtual/block/dm-X/dm/name) to identify the mapping between
|
|
# dm-X and system/vendor partitions.
|
|
allow update_verifier sysfs_dm:dir r_dir_perms;
|
|
allow update_verifier sysfs_dm:file r_file_perms;
|
|
|
|
# Read all blocks in DM wrapped system partition.
|
|
allow update_verifier dm_device:blk_file r_file_perms;
|
|
|
|
# Write to kernel message.
|
|
allow update_verifier kmsg_device:chr_file { getattr w_file_perms };
|
|
|
|
# Allow update_verifier to reboot the device.
|
|
set_prop(update_verifier, powerctl_prop)
|
|
|
|
# Allow to set the OTA related properties e.g. ota.warm_reset.
|
|
set_prop(update_verifier, ota_prop)
|
|
|
|
# Use Boot Control HAL
|
|
hal_client_domain(update_verifier, hal_bootctl)
|
|
|
|
# Access Checkpoint commands over binder
|
|
allow update_verifier vold_service:service_manager find;
|
|
binder_call(update_verifier, servicemanager)
|
|
binder_call(update_verifier, vold)
|