Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Startup Init Lite
提交
f048d6d8
S
Startup Init Lite
项目概览
OpenHarmony
/
Startup Init Lite
大约 1 年 前同步成功
通知
3
Star
37
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
S
Startup Init Lite
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
f048d6d8
编写于
12月 05, 2022
作者:
C
cheng_jinsong
提交者:
Gitee
12月 05, 2022
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'master' of gitee.com:openharmony/startup_init_lite into 1116_gid
Signed-off-by:
N
cheng_jinsong
<
chengjinsong2@huawei.com
>
上级
aa83cc48
7c4ae396
变更
58
隐藏空白更改
内联
并排
Showing
58 changed file
with
606 addition
and
191 deletion
+606
-191
begetd.gni
begetd.gni
+8
-0
device_info/BUILD.gn
device_info/BUILD.gn
+2
-0
interfaces/innerkits/BUILD.gn
interfaces/innerkits/BUILD.gn
+10
-11
interfaces/innerkits/fs_manager/fstab_mount.c
interfaces/innerkits/fs_manager/fstab_mount.c
+1
-1
interfaces/innerkits/init_module_engine/BUILD.gn
interfaces/innerkits/init_module_engine/BUILD.gn
+1
-0
interfaces/innerkits/libbeget_proxy.versionscript
interfaces/innerkits/libbeget_proxy.versionscript
+24
-0
services/begetctl/BUILD.gn
services/begetctl/BUILD.gn
+1
-5
services/begetctl/partitionslot.cpp
services/begetctl/partitionslot.cpp
+3
-3
services/etc/BUILD.gn
services/etc/BUILD.gn
+31
-1
services/etc/appender/file_appender.gni
services/etc/appender/file_appender.gni
+124
-0
services/etc/appender/file_appender.py
services/etc/appender/file_appender.py
+75
-0
services/etc/appender/file_appender.pydeps
services/etc/appender/file_appender.pydeps
+9
-0
services/etc/group
services/etc/group
+5
-3
services/etc/init.cfg
services/etc/init.cfg
+1
-0
services/etc/param/ohos.para
services/etc/param/ohos.para
+1
-3
services/etc/param/ohos.startup.para
services/etc/param/ohos.startup.para
+15
-0
services/etc/param/param_fixer.gni
services/etc/param/param_fixer.gni
+0
-1
services/etc/passwd
services/etc/passwd
+2
-0
services/etc_lite/group
services/etc_lite/group
+1
-0
services/etc_lite/passwd
services/etc_lite/passwd
+1
-0
services/init/include/init.h
services/init/include/init.h
+2
-0
services/init/include/init_service.h
services/init/include/init_service.h
+1
-1
services/init/include/init_service_socket.h
services/init/include/init_service_socket.h
+2
-2
services/init/init_capability.c
services/init/init_capability.c
+3
-1
services/init/init_common_cmds.c
services/init/init_common_cmds.c
+4
-3
services/init/init_common_service.c
services/init/init_common_service.c
+3
-3
services/init/init_config.c
services/init/init_config.c
+3
-13
services/init/init_service_manager.c
services/init/init_service_manager.c
+5
-2
services/init/init_service_socket.c
services/init/init_service_socket.c
+5
-5
services/init/lite/BUILD.gn
services/init/lite/BUILD.gn
+2
-1
services/init/lite/init.c
services/init/lite/init.c
+6
-0
services/init/lite/init_jobs.c
services/init/lite/init_jobs.c
+1
-1
services/init/standard/BUILD.gn
services/init/standard/BUILD.gn
+3
-6
services/init/standard/init.c
services/init/standard/init.c
+18
-4
services/init/standard/init_cmds.c
services/init/standard/init_cmds.c
+5
-24
services/init/standard/init_signal_handler.c
services/init/standard/init_signal_handler.c
+5
-3
services/modules/reboot/reboot.c
services/modules/reboot/reboot.c
+2
-1
services/modules/seccomp/seccomp_policy.c
services/modules/seccomp/seccomp_policy.c
+110
-25
services/modules/seccomp/seccomp_policy/system_arm.seccomp.policy
.../modules/seccomp/seccomp_policy/system_arm.seccomp.policy
+4
-0
services/modules/seccomp/seccomp_policy/system_arm64.seccomp.policy
...odules/seccomp/seccomp_policy/system_arm64.seccomp.policy
+4
-0
services/modules/selinux/selinux_adp.c
services/modules/selinux/selinux_adp.c
+12
-1
services/param/BUILD.gn
services/param/BUILD.gn
+2
-2
services/param/adapter/param_dac.c
services/param/adapter/param_dac.c
+2
-0
services/param/adapter/param_persistadp.c
services/param/adapter/param_persistadp.c
+18
-17
services/param/base/BUILD.gn
services/param/base/BUILD.gn
+21
-5
services/param/base/param_comm.c
services/param/base/param_comm.c
+2
-2
services/param/include/param_osadp.h
services/param/include/param_osadp.h
+3
-1
services/param/liteos/BUILD.gn
services/param/liteos/BUILD.gn
+9
-0
services/param/liteos/param_osadp.c
services/param/liteos/param_osadp.c
+15
-2
services/param/manager/param_manager.c
services/param/manager/param_manager.c
+2
-1
services/param/watcher/proxy/watcher_manager.cpp
services/param/watcher/proxy/watcher_manager.cpp
+4
-4
services/param/watcher/proxy/watcher_manager_stub.cpp
services/param/watcher/proxy/watcher_manager_stub.cpp
+3
-1
test/unittest/deviceinfo/DeviceInfoUnittest.cpp
test/unittest/deviceinfo/DeviceInfoUnittest.cpp
+0
-1
test/unittest/init/group_unittest.cpp
test/unittest/init/group_unittest.cpp
+1
-1
test/unittest/innerkits/innerkits_unittest.cpp
test/unittest/innerkits/innerkits_unittest.cpp
+3
-19
test/unittest/innerkits/modulemgr_unittest.cpp
test/unittest/innerkits/modulemgr_unittest.cpp
+0
-1
ueventd/BUILD.gn
ueventd/BUILD.gn
+3
-6
ueventd/ueventd_device_handler.c
ueventd/ueventd_device_handler.c
+3
-4
未找到文件。
begetd.gni
浏览文件 @
f048d6d8
...
...
@@ -28,5 +28,13 @@ declare_args() {
enable_ohos_startup_init_lite_use_posix_file_api = false
config_ohos_startup_init_lite_data_path = "/"
# config memory size for liteos-m
config_ohos_startup_init_lite_memory_size = 5120
# boot_kernel_extended_cmdline for extend cmdline
startup_init_with_param_base = false
if (!use_musl) {
startup_init_with_param_base = true
}
}
device_info/BUILD.gn
浏览文件 @
f048d6d8
...
...
@@ -33,6 +33,8 @@ if (!defined(ohos_lite)) {
"device_info_stub.cpp",
]
shlib_type = "sa"
include_dirs = [
"//foundation/systemabilitymgr/samgr/interfaces/innerkits/samgr_proxy/include/",
".",
...
...
interfaces/innerkits/BUILD.gn
浏览文件 @
f048d6d8
...
...
@@ -85,7 +85,7 @@ if (defined(ohos_lite)) {
defines += [ "__LINUX__" ]
deps += [
"//base/startup/init/services/loopevent:loopevent",
"//base/startup/init/services/param/base:param
eter
base",
"//base/startup/init/services/param/base:param
_
base",
"//base/startup/init/services/param/linux:param_client",
]
}
...
...
@@ -171,6 +171,11 @@ if (defined(ohos_lite)) {
sources += [ "syspara/param_wrapper.cpp" ]
sources += modulemgr_sources
innerapi_tags = [
"chipsetsdk",
"platformsdk",
]
defines = [
"INIT_AGENT",
"_GNU_SOURCE",
...
...
@@ -194,11 +199,7 @@ if (defined(ohos_lite)) {
"//third_party/bounds_checking_function:libsec_shared",
"//third_party/mbedtls:mbedtls_shared",
]
if (use_musl == false) {
deps += [ "//base/startup/init/services/param/base:parameterbase" ]
} else {
deps += [ "//base/startup/init/services/param/base:parameterbase_ext" ]
}
deps += [ "//base/startup/init/services/param/base:param_base" ]
external_deps = [
"c_utils:utils",
"hilog_native:libhilog_base",
...
...
@@ -224,6 +225,8 @@ if (defined(ohos_lite)) {
"service_watcher/service_watcher.c",
]
version_script = "libbeget_proxy.versionscript"
include_dirs = include_common
deps = [
":libbegetutil",
...
...
@@ -291,11 +294,7 @@ if (defined(ohos_lite)) {
"//third_party/bounds_checking_function:libsec_shared",
"//third_party/mbedtls:mbedtls_shared",
]
if (use_musl == false) {
deps += [ "//base/startup/init/services/param/base:parameterbase" ]
} else {
deps += [ "//base/startup/init/services/param/base:parameterbase_ext" ]
}
deps += [ "//base/startup/init/services/param/base:param_base" ]
external_deps = [
"c_utils:utils",
"hilog_native:libhilog_base",
...
...
interfaces/innerkits/fs_manager/fstab_mount.c
浏览文件 @
f048d6d8
...
...
@@ -326,7 +326,7 @@ static int GetSlotInfoFromBootctrl(off_t offset, off_t size)
BEGET_ERROR_CHECK
(
lseek
(
fd
,
offset
,
SEEK_SET
)
>=
0
,
close
(
fd
);
return
-
1
,
"Failed to lseek bootctrl device fd, errno %d"
,
errno
);
int
slotInfo
=
0
;
BEGET_INFO_CHECK
(
read
(
fd
,
&
slotInfo
,
size
)
==
size
,
close
(
fd
);
return
-
1
,
BEGET_INFO_CHECK
(
read
(
fd
,
&
slotInfo
,
size
of
(
slotInfo
)
)
==
size
,
close
(
fd
);
return
-
1
,
"Failed to read current slot from bootctrl, errno %d"
,
errno
);
close
(
fd
);
return
slotInfo
;
...
...
interfaces/innerkits/init_module_engine/BUILD.gn
浏览文件 @
f048d6d8
...
...
@@ -61,6 +61,7 @@ if (defined(ohos_lite)) {
install_images = [
"system",
"updater",
"ramdisk",
]
symlink_target_name = [ "libinit_module_engine.so" ]
}
...
...
interfaces/innerkits/libbeget_proxy.versionscript
0 → 100644
浏览文件 @
f048d6d8
# Copyright (c) 2021-2022 Huawei Device Co., Ltd.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
1.0 {
global:
AclGetDevUdid;
AclGetSerial;
ServiceWatchForStatus;
SystemWatchParameter;
WatchParameter;
RemoveParameterWatcher;
local:
*;
};
services/begetctl/BUILD.gn
浏览文件 @
f048d6d8
...
...
@@ -187,11 +187,7 @@ if (defined(ohos_lite)) {
"//base/startup/init/services/utils:libinit_utils",
"//third_party/bounds_checking_function:libsec_static",
]
if (use_musl == false) {
deps += [ "//base/startup/init/services/param/base:parameterbase" ]
} else {
deps += [ "//base/startup/init/services/param/base:parameterbase_ext" ]
}
deps += [ "//base/startup/init/services/param/base:param_base" ]
external_deps = [
"c_utils:utils",
"hilog_native:libhilog_base",
...
...
services/begetctl/partitionslot.cpp
浏览文件 @
f048d6d8
...
...
@@ -49,9 +49,9 @@ static int GetSlot(BShellHandle handle, int32_t argc, char *argv[])
}
std
::
cout
<<
"Command: partitionslot getslot"
<<
std
::
endl
;
sptr
<
IPartitionSlot
>
partitionslot
=
IPartitionSlot
::
Get
();
int
bootSlots
=
0
;
int
currentSlot
=
0
;
if
(
partitionslot
!=
nullptr
)
{
int
bootSlots
=
0
;
int
currentSlot
=
0
;
partitionslot
->
GetCurrentSlot
(
currentSlot
,
bootSlots
);
std
::
cout
<<
"The number of slots: "
<<
bootSlots
<<
","
<<
"current slot: "
<<
currentSlot
<<
std
::
endl
;
}
...
...
@@ -70,9 +70,9 @@ static int GetSuffix(BShellHandle handle, int32_t argc, char *argv[])
}
std
::
cout
<<
"Command: partitionslot getsuffix"
<<
std
::
endl
;
int
slot
=
atoi
(
argv
[
1
]);
std
::
string
suffix
=
""
;
sptr
<
IPartitionSlot
>
partitionslot
=
IPartitionSlot
::
Get
();
if
(
partitionslot
!=
nullptr
)
{
std
::
string
suffix
=
""
;
partitionslot
->
GetSlotSuffix
(
slot
,
suffix
);
std
::
cout
<<
"The slot "
<<
slot
<<
" matches with suffix: "
<<
suffix
<<
std
::
endl
;
}
...
...
services/etc/BUILD.gn
浏览文件 @
f048d6d8
...
...
@@ -119,9 +119,38 @@ if (defined(ohos_lite)) {
]
part_name = "init"
subsystem_name = "startup"
extra_paras = []
if (target_cpu == "arm64") {
extra_paras = [ "const.product.cpu.abilist=arm64-v8a" ]
extra_paras
+
= [ "const.product.cpu.abilist=arm64-v8a" ]
}
if (build_variant == "user") {
extra_paras += [
"const.secure=1",
"const.debuggable=0",
]
} else if (build_variant == "root") {
extra_paras += [
"const.secure=0",
"const.debuggable=1",
]
}
if (device_type != "default") {
extra_paras += [
"const.product.devicetype=${device_type}",
"const.build.characteristics=${device_type}",
]
}
module_install_dir = "etc/param"
}
ohos_prebuilt_para("ohos.startup.para") {
source = "//base/startup/init/services/etc/param/ohos.startup.para"
install_images = [
"system",
"updater",
]
part_name = "init"
subsystem_name = "startup"
module_install_dir = "etc/param"
}
...
...
@@ -204,6 +233,7 @@ if (defined(ohos_lite)) {
":ohos.para",
":ohos.para.dac",
":ohos.para.size",
":ohos.startup.para",
":ohos_const.para",
":passwd",
":syscap.json",
...
...
services/etc/appender/file_appender.gni
0 → 100755
浏览文件 @
f048d6d8
# Copyright (c) 2021 Huawei Device Co., Ltd.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import("//build/config/python.gni")
import("//build/templates/common/copy.gni")
# Append something (files or lines) to a file and install it.
#
# Variables:
# source: file to be appended (Required)
# deps: some targets deps on (Optional)
# output: the final install file name (Optional);
# If not set, it will install with the source file name
# files: files to be appended to the end of source file (Optional)
# lines: lines of strings to be appended to the end of souce file (Optional)
#
# Example:
# ohos_file_appender("cust_passwd") {
# source = "//base/startup/init/services/etc/passwd"
# deps = [ "//base/startup/init/services/etc:passwd" ]
# files = [ "cust_passwd", "passwd2" ]
# lines = [ "tses::1222:1222:/bin/false", "tses2::1223:1223:/bin/false" ]
# output = "passwd"
# }
# It will append files and lines to source passwd file after deps targets
#
template("ohos_file_appender") {
assert(defined(invoker.source), "source full target name must be defined.")
_file_appender_target = "${target_name}_appended"
if (defined(invoker.output)) {
_final_install_name = get_path_info(invoker.output, "file")
} else {
_final_install_name = get_path_info(invoker.source, "file")
}
_appended_file =
target_gen_dir + "/${target_name}.appended/" + _final_install_name
action_with_pydeps(_file_appender_target) {
script = "//base/startup/init/services/etc/appender/file_appender.py"
depfile = "${target_gen_dir}/${target_name}.d"
if (defined(invoker.deps)) {
deps = invoker.deps
} else {
deps = []
}
args = [
"--output",
rebase_path(_appended_file, root_build_dir),
"--source-file",
rebase_path(invoker.source, root_build_dir),
"--depfile",
rebase_path(depfile, root_build_dir),
]
if (defined(invoker.files)) {
foreach(file, invoker.files) {
args += [
"--append-file",
rebase_path(file, root_build_dir),
]
}
}
if (defined(invoker.lines)) {
foreach(line, invoker.lines) {
args += [
"--append-line",
line,
]
}
}
inputs = [ invoker.source ]
outputs = [ _appended_file ]
}
ohos_copy(target_name) {
forward_variables_from(invoker,
[
"testonly",
"visibility",
"deps",
"public_configs",
"subsystem_name",
"part_name",
# For generate_module_info
"install_images",
"module_install_dir",
"relative_install_dir",
"symlink_target_name",
# Open source license related
"license_file",
"license_as_sources",
])
if (defined(deps)) {
deps += [ ":$_file_appender_target" ]
} else {
deps = [ ":$_file_appender_target" ]
}
set_sources_assignment_filter([])
sources = [ _appended_file ]
outputs = [ "${target_out_dir}/${target_name}/${_final_install_name}" ]
module_type = "etc"
install_enable = true
module_source_dir = "${target_out_dir}/${target_name}"
module_install_name = _final_install_name
if (defined(invoker.install_enable)) {
install_enable = invoker.install_enable
}
}
}
services/etc/appender/file_appender.py
0 → 100755
浏览文件 @
f048d6d8
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Copyright (c) 2021 Huawei Device Co., Ltd.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import
optparse
import
os
import
sys
import
stat
import
json
def
parse_args
(
args
):
from
scripts.util
import
build_utils
# noqa: E402
args
=
build_utils
.
expand_file_args
(
args
)
parser
=
optparse
.
OptionParser
()
build_utils
.
add_depfile_option
(
parser
)
parser
.
add_option
(
'--output'
,
help
=
'fixed para file'
)
parser
.
add_option
(
'--source-file'
,
help
=
'source para file'
)
parser
.
add_option
(
'--append-file'
,
action
=
"append"
,
type
=
"string"
,
dest
=
"files"
,
help
=
'appended files'
)
parser
.
add_option
(
'--append-line'
,
action
=
"append"
,
type
=
"string"
,
dest
=
"lines"
,
help
=
'appended lines'
)
options
,
_
=
parser
.
parse_args
(
args
)
return
options
def
append_files
(
target_f
,
options
):
# Read source file
with
open
(
options
.
source_file
,
'r'
)
as
source_f
:
source_contents
=
source_f
.
read
()
target_f
.
write
(
source_contents
)
if
options
.
files
:
for
append_f
in
options
.
files
:
with
open
(
append_f
,
'r'
)
as
src
:
target_f
.
write
(
src
.
read
())
if
options
.
lines
:
for
line
in
options
.
lines
:
target_f
.
write
(
line
)
target_f
.
write
(
"
\n
"
)
def
main
(
args
):
sys
.
path
.
append
(
os
.
path
.
join
(
os
.
path
.
dirname
(
__file__
),
os
.
pardir
,
os
.
pardir
,
os
.
pardir
,
os
.
pardir
,
os
.
pardir
,
os
.
pardir
,
"build"
))
from
scripts.util
import
build_utils
# noqa: E402
options
=
parse_args
(
args
)
if
options
.
files
:
depfile_deps
=
([
options
.
source_file
]
+
options
.
files
)
else
:
depfile_deps
=
([
options
.
source_file
])
with
os
.
fdopen
(
os
.
open
(
options
.
output
,
os
.
O_RDWR
|
os
.
O_CREAT
,
stat
.
S_IWUSR
|
stat
.
S_IRUSR
),
'w'
)
as
target_f
:
append_files
(
target_f
,
options
)
build_utils
.
write_depfile
(
options
.
depfile
,
options
.
output
,
depfile_deps
,
add_pydeps
=
False
)
if
__name__
==
'__main__'
:
sys
.
exit
(
main
(
sys
.
argv
[
1
:]))
services/etc/appender/file_appender.pydeps
0 → 100755
浏览文件 @
f048d6d8
# Generated by running:
# build/print_python_deps.py --root base/startup/init/services/etc/appender --output base/startup/init/services/etc/appender/file_appender.pydeps base/startup/init/services/etc/appender/file_appender.py
../../../../../../build/gn_helpers.py
../../../../../../build/scripts/__init__.py
../../../../../../build/scripts/util/__init__.py
../../../../../../build/scripts/util/build_utils.py
../../../../../../build/scripts/util/md5_check.py
../../../../../../build/scripts/util/pycache.py
file_appender.py
services/etc/group
浏览文件 @
f048d6d8
...
...
@@ -32,7 +32,7 @@ uiserver:x:1048:
servicectrl:x:1050:root,shell,system,samgr,hdf_devmgr,foundation
powerctrl:x:1051:root,shell,system,update,power_host,charger,foundation
bootctrl:x:1052:root,shell,system
deviceprivate:x:1053:root,shell,system,samgr,hdf_devmgr,deviceinfo,dsoftbus,dms,account,useriam,access_token,device_manager,foundation,dbms,deviceauth,huks_server,dlp_credential,dsserver,edm
deviceprivate:x:1053:root,shell,system,samgr,hdf_devmgr,deviceinfo,dsoftbus,dms,account,useriam,access_token,device_manager,foundation,dbms,deviceauth,huks_server,dlp_credential,dsserver,edm
,update
hiview:x:1201:
hidumper_service:x:1212:
shell:x:2000:
...
...
@@ -46,7 +46,7 @@ ddms:x:3012:
access_token:x:3020:
blue_host:x:3021:
sample_host:x:3022:
usb_host:x:3023:
usb_host:x:3023:
shell
usbfnMaster_host:x:3024:
power_host:x:3025:
wifi_host:x:3026:
...
...
@@ -119,5 +119,7 @@ memmgr:x:1111:
ispserver:x:3821:
dfs_share:x:3822:
appspawn:x:6005:
print:x:3823:
security_guard:x:3520:
dsserver:x:3068:
\ No newline at end of file
tee:x:6668:
dsserver:x:3068:
services/etc/init.cfg
浏览文件 @
f048d6d8
...
...
@@ -169,6 +169,7 @@
"chown system system /sys/class/leds/green/brightness",
"chown system system /sys/class/leds/blue/brightness",
"chown root radio /proc/cmdline",
"chown update update /dev/block/by-name/misc",
"setparam net.tcp.default_init_rwnd 60"
]
}, {
...
...
services/etc/param/ohos.para
浏览文件 @
f048d6d8
...
...
@@ -13,15 +13,13 @@
const.actionable_compatible_property.enabled=false
const.postinstall.fstab.prefix=/system
const.secure=
1
const.secure=
0
security.perf_harden=1
const.allow.mock.location=0
const.debuggable=1
const.build.characteristics=default
const.product.model=ohos
const.product.name="OpenHarmony 3.2"
persist.sys.usb.config=hdc
persist.init.bootevent.enable=true
const.sandbox=enable
const.product.devicetype=default
const.software.model=default
...
...
services/etc/param/ohos.startup.para
0 → 100644
浏览文件 @
f048d6d8
# Copyright (c) 2022 Huawei Device Co., Ltd.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
persist.sys.usb.config=hdc
persist.init.bootevent.enable=true
\ No newline at end of file
services/etc/param/param_fixer.gni
浏览文件 @
f048d6d8
...
...
@@ -68,7 +68,6 @@ template("ohos_prebuilt_para") {
"license_file",
"license_as_sources",
])
set_sources_assignment_filter([])
sources = [ _fixed_param_file ]
outputs = [ "${target_out_dir}/${target_name}/${_output_para_file}" ]
module_type = "etc"
...
...
services/etc/passwd
浏览文件 @
f048d6d8
...
...
@@ -115,5 +115,7 @@ motion_host:x:3065:3065:::/bin/false
memmgr:x:1111:1111:::/bin/false
ispserver:x:3821:3821:::/bin/false
dfs_share:x:3822:3822:::/bin/false
print:x:3823:3823:::/bin/false
security_guard:x:3520:3520:::/bin/false
tee:x:6668:6668:::/bin/false
dsserver:x:3068:3068:::/bin/false
services/etc_lite/group
浏览文件 @
f048d6d8
...
...
@@ -6,3 +6,4 @@ shell:x:2000:
faultloggerd:x:1202:root,system
watchdog:x:2001:root
ueventd:x:2002:root
device_manager:x:3062:
services/etc_lite/passwd
浏览文件 @
f048d6d8
...
...
@@ -5,3 +5,4 @@ shell:x:2000:2000:::/bin/false
faultloggerd:x:1202:1202:::/bin/false
watchdog:x:2001:2001:::/bin/false
ueventd:x:2002:2002:::/bin/false
device_manager:x:3062:3062:::/bin/false
services/init/include/init.h
浏览文件 @
f048d6d8
...
...
@@ -47,6 +47,8 @@ void SystemConfig(void);
void
SystemRun
(
void
);
void
SystemExecuteRcs
(
void
);
void
ParseInitCfgByPriority
(
void
);
int
ParseInitCfg
(
const
char
*
configFile
,
void
*
context
);
void
ReadConfig
(
void
);
void
SignalInit
(
void
);
...
...
services/init/include/init_service.h
浏览文件 @
f048d6d8
...
...
@@ -172,7 +172,7 @@ void ReapService(Service *service);
void
NotifyServiceChange
(
Service
*
service
,
int
status
);
int
IsForbidden
(
const
char
*
fieldStr
);
int
SetImportantValue
(
Service
*
curServ
,
const
char
*
attrName
,
int
value
,
int
flag
);
int
Ge
tServiceCaps
(
const
cJSON
*
curArrItem
,
Service
*
curServ
);
int
Ini
tServiceCaps
(
const
cJSON
*
curArrItem
,
Service
*
curServ
);
int
ServiceExec
(
const
Service
*
service
);
void
CloseServiceFds
(
Service
*
service
,
bool
needFree
);
int
UpdaterServiceFds
(
Service
*
service
,
int
*
fds
,
size_t
fdCount
);
...
...
services/init/include/init_service_socket.h
浏览文件 @
f048d6d8
...
...
@@ -73,8 +73,8 @@ typedef struct ServiceSocket_ {
int
CreateServiceSocket
(
struct
Service_
*
service
);
void
CloseServiceSocket
(
struct
Service_
*
service
);
int
SocketAdd
Watcher
(
ServiceWatcher
*
watcherHandle
,
struct
Service_
*
service
,
int
fd
);
void
SocketDel
Watcher
(
ServiceWatcher
watcherHandle
);
int
AddSocket
Watcher
(
ServiceWatcher
*
watcherHandle
,
struct
Service_
*
service
,
int
fd
);
void
RemoveSocket
Watcher
(
ServiceWatcher
watcherHandle
);
#ifdef __cplusplus
#if __cplusplus
...
...
services/init/init_capability.c
浏览文件 @
f048d6d8
...
...
@@ -84,7 +84,7 @@ static unsigned int GetCapByString(const char *capStr)
return
CAP_LAST_CAP
+
1
;
}
int
Ge
tServiceCaps
(
const
cJSON
*
curArrItem
,
Service
*
service
)
int
Ini
tServiceCaps
(
const
cJSON
*
curArrItem
,
Service
*
service
)
{
INIT_ERROR_CHECK
(
service
!=
NULL
,
return
SERVICE_FAILURE
,
"service is null ptr."
);
INIT_ERROR_CHECK
(
curArrItem
!=
NULL
,
return
SERVICE_FAILURE
,
"json is null ptr."
);
...
...
@@ -116,6 +116,8 @@ int GetServiceCaps(const cJSON *curArrItem, Service *service)
break
;
}
caps
=
GetCapByString
(
capStr
);
}
else
{
caps
=
CAP_LAST_CAP
+
1
;
}
if
((
caps
>
CAP_LAST_CAP
)
&&
(
caps
!=
(
unsigned
int
)
FULL_CAP
))
{
INIT_LOGE
(
"service=%s not support caps = %s caps %d"
,
service
->
name
,
capStr
,
caps
);
...
...
services/init/init_common_cmds.c
浏览文件 @
f048d6d8
...
...
@@ -68,7 +68,7 @@ static char *AddOneArg(const char *param, size_t paramLen)
begin
=
strchr
(
begin
+
1
,
'$'
);
}
size_t
allocSize
=
paramLen
+
(
PARAM_VALUE_LEN_MAX
*
valueCount
)
+
1
;
char
*
arg
=
calloc
(
sizeof
(
char
),
allocSize
);
char
*
arg
=
calloc
(
allocSize
,
sizeof
(
char
)
);
INIT_CHECK
(
arg
!=
NULL
,
return
NULL
);
int
ret
=
GetParamValue
(
param
,
paramLen
,
arg
,
allocSize
);
INIT_ERROR_CHECK
(
ret
==
0
,
free
(
arg
);
...
...
@@ -104,6 +104,7 @@ char *BuildStringFromCmdArg(const struct CmdArgs *ctx, int startIndex)
const
struct
CmdArgs
*
GetCmdArg
(
const
char
*
cmdContent
,
const
char
*
delim
,
int
argsCount
)
{
INIT_CHECK_RETURN_VALUE
(
cmdContent
!=
NULL
,
NULL
);
INIT_CHECK_RETURN_VALUE
(
delim
!=
NULL
,
NULL
);
INIT_WARNING_CHECK
(
argsCount
<=
SPACES_CNT_IN_CMD_MAX
,
argsCount
=
SPACES_CNT_IN_CMD_MAX
,
"Too much arguments for command, max number is %d"
,
SPACES_CNT_IN_CMD_MAX
);
struct
CmdArgs
*
ctx
=
(
struct
CmdArgs
*
)
calloc
(
1
,
sizeof
(
struct
CmdArgs
)
+
sizeof
(
char
*
)
*
(
argsCount
+
1
));
...
...
@@ -427,7 +428,7 @@ static void DoMount(const struct CmdArgs *ctx)
INIT_ERROR_CHECK
(
fileSysType
!=
NULL
,
return
,
"Failed to get fileSysType."
);
index
++
;
char
*
source
=
(
ctx
->
argc
>
index
)
?
ctx
->
argv
[
index
]
:
NULL
;
char
*
source
=
(
ctx
->
argc
>
index
)
?
ctx
->
argv
[
index
]
:
NULL
;
INIT_ERROR_CHECK
(
source
!=
NULL
,
return
,
"Failed to get source."
);
index
++
;
...
...
@@ -714,7 +715,7 @@ int GetCmdLinesFromJson(const cJSON *root, CmdLines **cmdLines)
return
0
;
}
long
long
InitDiffTime
(
INIT_TIMING_STAT
*
stat
)
long
long
InitDiffTime
(
INIT_TIMING_STAT
*
stat
)
{
long
long
diff
=
(
long
long
)((
stat
->
endTime
.
tv_sec
-
stat
->
startTime
.
tv_sec
)
*
1000000
);
// 1000000 1000ms
if
(
stat
->
endTime
.
tv_nsec
>
stat
->
startTime
.
tv_nsec
)
{
...
...
services/init/init_common_service.c
浏览文件 @
f048d6d8
...
...
@@ -470,7 +470,7 @@ static void CheckServiceSocket(Service *service)
INIT_LOGE
(
"Invalid socket %s for service"
,
service
->
name
);
tmpSock
=
tmpSock
->
next
;
}
SocketAdd
Watcher
(
&
tmpSock
->
watcher
,
service
,
tmpSock
->
sockFd
);
AddSocket
Watcher
(
&
tmpSock
->
watcher
,
service
,
tmpSock
->
sockFd
);
tmpSock
=
tmpSock
->
next
;
}
return
;
...
...
@@ -556,8 +556,8 @@ void ServiceReap(Service *service)
int
UpdaterServiceFds
(
Service
*
service
,
int
*
fds
,
size_t
fdCount
)
{
if
(
service
==
NULL
)
{
INIT_LOGE
(
"Invalid service info"
);
if
(
service
==
NULL
||
fds
==
NULL
)
{
INIT_LOGE
(
"Invalid service info
or fds
"
);
return
-
1
;
}
...
...
services/init/init_config.c
浏览文件 @
f048d6d8
...
...
@@ -35,15 +35,6 @@ int ParseInitCfg(const char *configFile, void *context)
{
UNUSED
(
context
);
INIT_LOGV
(
"Parse init configs from %s"
,
configFile
);
static
const
char
*
excludeCfg
[]
=
{
"/system/etc/init/weston.cfg"
};
for
(
int
i
=
0
;
i
<
(
int
)
ARRAY_LENGTH
(
excludeCfg
);
i
++
)
{
if
(
strcmp
(
configFile
,
excludeCfg
[
i
])
==
0
)
{
INIT_LOGE
(
"ParseInitCfg %s not support"
,
configFile
);
return
0
;
}
}
char
*
fileBuf
=
ReadFileToBuf
(
configFile
);
INIT_ERROR_CHECK
(
fileBuf
!=
NULL
,
return
-
1
,
"Failed to read file content %s"
,
configFile
);
...
...
@@ -59,8 +50,8 @@ int ParseInitCfg(const char *configFile, void *context)
static
void
ParseAllImports
(
const
cJSON
*
root
)
{
char
*
tmpParamValue
=
calloc
(
sizeof
(
char
),
PARAM_VALUE_LEN_MAX
+
1
);
INIT_ERROR_CHECK
(
tmpParamValue
!=
0
,
return
,
"Failed to alloc memory for param"
);
char
*
tmpParamValue
=
calloc
(
PARAM_VALUE_LEN_MAX
+
1
,
sizeof
(
char
)
);
INIT_ERROR_CHECK
(
tmpParamValue
!=
NULL
,
return
,
"Failed to alloc memory for param"
);
cJSON
*
importAttr
=
cJSON_GetObjectItemCaseSensitive
(
root
,
"import"
);
if
(
!
cJSON_IsArray
(
importAttr
))
{
...
...
@@ -103,8 +94,7 @@ void ReadConfig(void)
ReadFileInDir
(
OTHER_CHARGE_PATH
,
".cfg"
,
ParseInitCfg
,
NULL
);
}
else
if
(
InUpdaterMode
()
==
0
)
{
ParseInitCfg
(
INIT_CONFIGURATION_FILE
,
NULL
);
ReadFileInDir
(
OTHER_CFG_PATH
,
".cfg"
,
ParseInitCfg
,
NULL
);
ReadFileInDir
(
"/vendor/etc/init"
,
".cfg"
,
ParseInitCfg
,
NULL
);
ParseInitCfgByPriority
();
}
else
{
ReadFileInDir
(
"/etc"
,
".cfg"
,
ParseInitCfg
,
NULL
);
}
...
...
services/init/init_service_manager.c
浏览文件 @
f048d6d8
...
...
@@ -247,6 +247,9 @@ static int GetGid(cJSON *json, gid_t *gid, Service *curServ)
*
gid
=
DecodeGid
(
str
);
}
else
if
(
cJSON_IsNumber
(
json
))
{
*
gid
=
(
gid_t
)
cJSON_GetNumberValue
(
json
);
}
else
{
INIT_LOGW
(
"Service %s with invalid gid configuration"
,
curServ
->
name
);
*
gid
=
-
1
;
// Invalid gid, set as -1
}
INIT_ERROR_CHECK
(
*
gid
!=
(
gid_t
)(
-
1
),
return
SERVICE_FAILURE
,
"Failed to get gid for %s"
,
curServ
->
name
);
return
SERVICE_SUCCESS
;
...
...
@@ -320,7 +323,7 @@ static int ParseSocketFamily(cJSON *json, ServiceSocket *sockopt)
char
*
stringValue
=
GetStringValue
(
json
,
"family"
,
&
strLen
);
INIT_ERROR_CHECK
((
stringValue
!=
NULL
)
&&
(
strLen
>
0
),
return
SERVICE_FAILURE
,
"Failed to get string for family"
);
if
(
str
ncmp
(
stringValue
,
"AF_UNIX"
,
strLen
)
==
0
)
{
if
(
str
cmp
(
stringValue
,
"AF_UNIX"
)
==
0
)
{
sockopt
->
family
=
AF_UNIX
;
}
else
if
(
strncmp
(
stringValue
,
"AF_NETLINK"
,
strLen
)
==
0
)
{
sockopt
->
family
=
AF_NETLINK
;
...
...
@@ -851,7 +854,7 @@ int ParseOneService(const cJSON *curItem, Service *service)
ParseOneServiceArgs
(
curItem
,
service
);
ret
=
GetServiceSandbox
(
curItem
,
service
);
INIT_ERROR_CHECK
(
ret
==
0
,
return
SERVICE_FAILURE
,
"Failed to get sandbox for service %s"
,
service
->
name
);
ret
=
Ge
tServiceCaps
(
curItem
,
service
);
ret
=
Ini
tServiceCaps
(
curItem
,
service
);
INIT_ERROR_CHECK
(
ret
==
0
,
return
SERVICE_FAILURE
,
"Failed to get caps for service %s"
,
service
->
name
);
ret
=
GetServiceOnDemand
(
curItem
,
service
);
INIT_ERROR_CHECK
(
ret
==
0
,
return
SERVICE_FAILURE
,
"Failed to get ondemand flag for service %s"
,
service
->
name
);
...
...
services/init/init_service_socket.c
浏览文件 @
f048d6d8
...
...
@@ -177,13 +177,13 @@ static void ProcessWatchEvent_(const WatcherHandle watcherHandle, int fd, uint32
return
;
}
INIT_LOGI
(
"Socket information detected, fd:%d service name:%s"
,
fd
,
service
->
name
);
SocketDel
Watcher
(
watcherHandle
);
RemoveSocket
Watcher
(
watcherHandle
);
if
(
ServiceStart
(
service
)
!=
SERVICE_SUCCESS
)
{
INIT_LOGE
(
"Service %s start failed!"
,
service
->
name
);
}
}
int
SocketAdd
Watcher
(
ServiceWatcher
*
watcherHandle
,
Service
*
service
,
int
fd
)
int
AddSocket
Watcher
(
ServiceWatcher
*
watcherHandle
,
Service
*
service
,
int
fd
)
{
WatcherHandle
handle
;
LE_WatchInfo
info
=
{};
...
...
@@ -197,7 +197,7 @@ int SocketAddWatcher(ServiceWatcher *watcherHandle, Service *service, int fd)
return
ret
;
}
void
SocketDel
Watcher
(
ServiceWatcher
watcherHandle
)
void
RemoveSocket
Watcher
(
ServiceWatcher
watcherHandle
)
{
LE_RemoveWatcher
(
LE_GetDefaultLoop
(),
(
WatcherHandle
)
watcherHandle
);
}
...
...
@@ -219,7 +219,7 @@ int CreateServiceSocket(Service *service)
INIT_CHECK_RETURN_VALUE
(
ret
==
0
,
-
1
);
}
if
(
strcmp
(
service
->
name
,
"ueventd"
)
!=
0
)
{
ret
=
SocketAdd
Watcher
(
&
tmpSock
->
watcher
,
service
,
tmpSock
->
sockFd
);
ret
=
AddSocket
Watcher
(
&
tmpSock
->
watcher
,
service
,
tmpSock
->
sockFd
);
INIT_CHECK_RETURN_VALUE
(
ret
==
0
,
-
1
);
}
}
...
...
@@ -237,7 +237,7 @@ void CloseServiceSocket(Service *service)
ServiceSocket
*
sockopt
=
service
->
socketCfg
;
while
(
sockopt
!=
NULL
)
{
if
(
sockopt
->
watcher
!=
NULL
)
{
SocketDel
Watcher
(
sockopt
->
watcher
);
RemoveSocket
Watcher
(
sockopt
->
watcher
);
}
if
(
sockopt
->
sockFd
>=
0
)
{
close
(
sockopt
->
sockFd
);
...
...
services/init/lite/BUILD.gn
浏览文件 @
f048d6d8
...
...
@@ -49,6 +49,7 @@ executable("init") {
include_dirs = [
"//base/startup/init/interfaces/innerkits/include",
"//base/startup/init/interfaces/innerkits/fd_holder",
"//base/startup/init/services/include/param",
"//base/startup/init/services/init/include",
"//third_party/cJSON",
"//third_party/bounds_checking_function/include",
...
...
@@ -61,7 +62,7 @@ executable("init") {
"//base/startup/init/services/log:init_log",
"//base/startup/init/services/loopevent:loopevent",
"//base/startup/init/services/modules/init_hook:inithook",
"//base/startup/init/services/param/base:param
eter
base",
"//base/startup/init/services/param/base:param
_
base",
"//base/startup/init/services/utils:libinit_utils",
"//build/lite/config/component/cJSON:cjson_static",
"//third_party/bounds_checking_function:libsec_static",
...
...
services/init/lite/init.c
浏览文件 @
f048d6d8
...
...
@@ -50,6 +50,12 @@ void SystemPrepare(void)
{
}
void
ParseInitCfgByPriority
(
void
)
{
ReadFileInDir
(
OTHER_CFG_PATH
,
".cfg"
,
ParseInitCfg
,
NULL
);
ReadFileInDir
(
"/vendor/etc/init"
,
".cfg"
,
ParseInitCfg
,
NULL
);
}
void
SystemConfig
(
void
)
{
InitServiceSpace
();
...
...
services/init/lite/init_jobs.c
浏览文件 @
f048d6d8
...
...
@@ -52,7 +52,7 @@ static int GetJobName(const cJSON *jobItem, Job *resJob)
return
0
;
}
if
(
memcpy_s
(
resJob
->
name
,
MAX_JOB_NAME_LEN
,
jobNameStr
,
strlen
(
jobNameStr
)
)
!=
EOK
)
{
if
(
strcpy_s
(
resJob
->
name
,
MAX_JOB_NAME_LEN
,
jobNameStr
)
!=
EOK
)
{
INIT_LOGE
(
"Get job name
\"
%s
\"
failed"
,
jobNameStr
);
return
0
;
}
...
...
services/init/standard/BUILD.gn
浏览文件 @
f048d6d8
...
...
@@ -69,11 +69,7 @@ ohos_executable("init") {
"//base/startup/init/services/sandbox:sandbox",
"//base/startup/init/services/utils:libinit_utils",
]
if (use_musl == false) {
deps += [ "//base/startup/init/services/param/base:parameterbase" ]
} else {
deps += [ "//base/startup/init/services/param/base:parameterbase_ext" ]
}
deps += [ "//base/startup/init/services/param/base:param_base" ]
deps += [
"//base/customization/config_policy/frameworks/config_policy:configpolicy_util_for_init_static",
...
...
@@ -130,8 +126,9 @@ ohos_executable("init") {
if (!enable_ramdisk) {
defines += [ "DISABLE_INIT_TWO_STAGES" ]
}
if (
support_jsapi
) {
if (
defined(global_parts_info.developtools_profiler)
) {
defines += [ "SUPPORT_PROFILER_HIDEBUG" ]
external_deps = [ "profiler:libhidebug_init" ]
}
if (asan_detector) {
defines += [ "ASAN_DETECTOR" ]
...
...
services/init/standard/init.c
浏览文件 @
f048d6d8
...
...
@@ -94,6 +94,10 @@ static int FdHolderSockInit(void)
void
SystemInit
(
void
)
{
SignalInit
();
// Set up a session keyring that all processes will have access to.
KeyCtrlGetKeyringId
(
KEY_SPEC_SESSION_KEYRING
,
1
);
// umask call always succeeds and return the previous mask value which is not needed here
(
void
)
umask
(
DEFAULT_UMASK_INIT
);
MakeDirRecursive
(
"/dev/unix/socket"
,
S_IRWXU
|
S_IRGRP
|
S_IXGRP
|
S_IROTH
|
S_IXOTH
);
...
...
@@ -199,9 +203,6 @@ static void StartInitSecondStage(void)
// It will panic if close stdio before execv("/bin/sh", NULL)
CloseStdio
();
// Set up a session keyring that all processes will have access to.
KeyCtrlGetKeyringId
(
KEY_SPEC_SESSION_KEYRING
,
1
);
#ifndef DISABLE_INIT_TWO_STAGES
INIT_LOGI
(
"Start init second stage."
);
SwitchRoot
(
"/usr"
);
...
...
@@ -251,7 +252,7 @@ HOOK_MGR *GetBootStageHookMgr()
return
bootStageHookMgr
;
}
INIT_TIMING_STAT
g_bootJob
=
{
0
};
INIT_TIMING_STAT
g_bootJob
=
{
{
0
},
{
0
}
};
static
void
RecordInitBootEvent
(
const
char
*
initBootEvent
)
{
...
...
@@ -370,6 +371,19 @@ INIT_STATIC void TriggerServices(int startMode)
}
}
void
ParseInitCfgByPriority
(
void
)
{
CfgFiles
*
files
=
GetCfgFiles
(
"etc/init"
);
for
(
int
i
=
0
;
files
&&
i
<
MAX_CFG_POLICY_DIRS_CNT
;
i
++
)
{
if
(
files
->
paths
[
i
])
{
if
(
ReadFileInDir
(
files
->
paths
[
i
],
".cfg"
,
ParseInitCfg
,
NULL
)
<
0
)
{
break
;
}
}
}
FreeCfgFiles
(
files
);
}
void
SystemConfig
(
void
)
{
INIT_TIMING_STAT
timingStat
;
...
...
services/init/standard/init_cmds.c
浏览文件 @
f048d6d8
...
...
@@ -44,6 +44,10 @@
#include "securec.h"
#include "fscrypt_utils.h"
#ifdef SUPPORT_PROFILER_HIDEBUG
#include <hidebug_base.h>
#endif
#define FSCRYPT_POLICY_BUF_SIZE (60)
#define DECIMAL 10
#define OCTAL 8
...
...
@@ -526,30 +530,7 @@ const struct CmdTable *GetCmdTable(int *number)
void
OpenHidebug
(
const
char
*
name
)
{
#ifdef SUPPORT_PROFILER_HIDEBUG
#ifdef __aarch64__
const
char
*
debugSoPath
=
"/system/lib64/libhidebug.so"
;
#else
const
char
*
debugSoPath
=
"/system/lib/libhidebug.so"
;
#endif
do
{
if
(
access
(
debugSoPath
,
F_OK
)
!=
0
)
{
break
;
}
void
*
handle
=
dlopen
(
debugSoPath
,
RTLD_LAZY
);
if
(
handle
==
NULL
)
{
INIT_LOGE
(
"Failed to dlopen libhidebug.so, %s
\n
"
,
dlerror
());
break
;
}
bool
(
*
initParam
)();
initParam
=
(
bool
(
*
)())
dlsym
(
handle
,
"InitEnvironmentParam"
);
if
(
initParam
==
NULL
)
{
INIT_LOGE
(
"Failed to dlsym InitEnvironmentParam, %s
\n
"
,
dlerror
());
dlclose
(
handle
);
break
;
}
(
*
initParam
)(
name
);
dlclose
(
handle
);
}
while
(
0
);
InitEnvironmentParam
(
name
);
#endif
}
...
...
services/init/standard/init_signal_handler.c
浏览文件 @
f048d6d8
...
...
@@ -39,12 +39,14 @@ INIT_STATIC void ProcessSignal(const struct signalfd_siginfo *siginfo)
Service
*
service
=
GetServiceByPid
(
sigPID
);
// check child process exit status
if
(
WIFSIGNALED
(
procStat
))
{
INIT_LOGE
(
"Child process %s(pid %d) exit with
code
: %d"
,
INIT_LOGE
(
"Child process %s(pid %d) exit with
signal
: %d"
,
service
==
NULL
?
"Unknown"
:
service
->
name
,
sigPID
,
WTERMSIG
(
procStat
));
}
if
(
WIFEXITED
(
procStat
))
{
}
else
if
(
WIFEXITED
(
procStat
))
{
INIT_LOGE
(
"Child process %s(pid %d) exit with code : %d"
,
service
==
NULL
?
"Unknown"
:
service
->
name
,
sigPID
,
WEXITSTATUS
(
procStat
));
}
else
{
INIT_LOGE
(
"Child process %s(pid %d) exit with invalid status : %d"
,
service
==
NULL
?
"Unknown"
:
service
->
name
,
sigPID
,
procStat
);
}
CmdServiceProcessDelClient
(
sigPID
);
INIT_LOGI
(
"SigHandler, SIGCHLD received, Service:%s pid:%d uid:%d status:%d."
,
...
...
services/modules/reboot/reboot.c
浏览文件 @
f048d6d8
...
...
@@ -115,7 +115,8 @@ static int DoRebootOther(int id, const char *name, int argc, const char **argv)
const
char
*
cmd
=
strstr
(
argv
[
0
],
"reboot,"
);
PLUGIN_CHECK
(
cmd
!=
NULL
,
return
-
1
,
"Invalid parameter argc %s"
,
argv
[
0
]);
PLUGIN_LOGI
(
"DoRebootOther argv %s"
,
argv
[
0
]);
return
syscall
(
__NR_reboot
,
LINUX_REBOOT_MAGIC1
,
LINUX_REBOOT_MAGIC2
,
LINUX_REBOOT_CMD_RESTART2
,
cmd
+
strlen
(
"reboot,"
));
return
syscall
(
__NR_reboot
,
LINUX_REBOOT_MAGIC1
,
LINUX_REBOOT_MAGIC2
,
LINUX_REBOOT_CMD_RESTART2
,
cmd
+
strlen
(
"reboot,"
));
}
static
void
RebootAdpInit
(
void
)
...
...
services/modules/seccomp/seccomp_policy.c
浏览文件 @
f048d6d8
...
...
@@ -26,6 +26,7 @@
#include <linux/audit.h>
#include <linux/seccomp.h>
#include <linux/filter.h>
#include <limits.h>
#ifndef SECCOMP_SET_MODE_FILTER
#define SECCOMP_SET_MODE_FILTER (1)
...
...
@@ -33,12 +34,21 @@
#ifdef __aarch64__
#define FILTER_LIB_PATH_FORMAT "/system/lib64/lib%s_filter.z.so"
#define FILTER_LIB_PATH_HEAD "/system/lib64/lib"
#else
#define FILTER_LIB_PATH_FORMAT "/system/lib/lib%s_filter.z.so"
#define FILTER_LIB_PATH_HEAD "/system/lib/lib"
#endif
#define FILTER_NAME_FORMAT "g_%sSeccompFilter"
#define FILTER_SIZE_STRING "Size"
typedef
enum
{
SECCOMP_SUCCESS
,
INPUT_ERROR
,
RETURN_NULL
,
RETURN_ERROR
}
SeccompErrorCode
;
static
bool
IsSupportFilterFlag
(
unsigned
int
filterFlag
)
{
errno
=
0
;
...
...
@@ -53,6 +63,10 @@ static bool IsSupportFilterFlag(unsigned int filterFlag)
static
bool
InstallSeccompPolicy
(
const
struct
sock_filter
*
filter
,
size_t
filterSize
,
unsigned
int
filterFlag
)
{
if
(
filter
==
NULL
)
{
return
false
;
}
unsigned
int
flag
=
0
;
struct
sock_fprog
prog
=
{
(
unsigned
short
)
filterSize
,
...
...
@@ -75,43 +89,114 @@ static bool InstallSeccompPolicy(const struct sock_filter* filter, size_t filter
return
true
;
}
bool
SetSeccompPolicyWith
Name
(
const
char
*
filterName
)
static
char
*
GetFilterFileBy
Name
(
const
char
*
filterName
)
{
char
filterLibPath
[
512
]
=
{
0
};
char
filterVaribleName
[
512
]
=
{
0
};
struct
sock_filter
*
filterPtr
=
NULL
;
size_t
*
filterSize
=
NULL
;
size_t
maxFilterNameLen
=
PATH_MAX
-
strlen
(
FILTER_LIB_PATH_FORMAT
)
+
strlen
(
"%s"
)
-
1
;
if
(
filterName
==
NULL
||
strlen
(
filterName
)
>
maxFilterNameLen
)
{
return
NULL
;
}
char
filterLibPath
[
PATH_MAX
]
=
{
0
};
int
rc
=
snprintf_s
(
filterLibPath
,
sizeof
(
filterLibPath
),
\
strlen
(
filterName
)
+
strlen
(
FILTER_LIB_PATH_FORMAT
)
-
strlen
(
"%s"
),
\
FILTER_LIB_PATH_FORMAT
,
filterName
);
PLUGIN_CHECK
(
rc
!=
-
1
,
return
false
,
"snprintf_s filterLibPath failed"
);
strlen
(
filterName
)
+
strlen
(
FILTER_LIB_PATH_FORMAT
)
-
strlen
(
"%s"
),
\
FILTER_LIB_PATH_FORMAT
,
filterName
);
if
(
rc
==
-
1
)
{
return
NULL
;
}
return
realpath
(
filterLibPath
,
NULL
);
}
static
int
GetSeccompPolicy
(
const
char
*
filterName
,
int
**
handler
,
char
*
filterLibRealPath
,
struct
sock_fprog
*
prog
)
{
if
(
filterName
==
NULL
||
filterLibRealPath
==
NULL
||
\
handler
==
NULL
||
prog
==
NULL
)
{
return
INPUT_ERROR
;
}
rc
=
snprintf_s
(
filterVaribleName
,
sizeof
(
filterVaribleName
),
\
if
(
strncmp
(
filterLibRealPath
,
FILTER_LIB_PATH_HEAD
,
strlen
(
FILTER_LIB_PATH_HEAD
)))
{
return
INPUT_ERROR
;
}
char
filterVaribleName
[
PATH_MAX
]
=
{
0
};
struct
sock_filter
*
filter
=
NULL
;
size_t
*
filterSize
=
NULL
;
void
*
policyHanlder
=
NULL
;
int
ret
=
SECCOMP_SUCCESS
;
do
{
int
rc
=
snprintf_s
(
filterVaribleName
,
sizeof
(
filterVaribleName
),
\
strlen
(
filterName
)
+
strlen
(
FILTER_NAME_FORMAT
)
-
strlen
(
"%s"
),
\
FILTER_NAME_FORMAT
,
filterName
);
PLUGIN_CHECK
(
rc
!=
-
1
,
return
false
,
"snprintf_s faiVribleName failed"
);
const
char
*
filterLibRealPath
=
realpath
(
filterLibPath
,
NULL
);
PLUGIN_CHECK
(
filterLibRealPath
!=
NULL
,
return
false
,
"format filter lib real path failed"
);
if
(
rc
==
-
1
)
{
ret
=
RETURN_ERROR
;
break
;
}
policyHanlder
=
dlopen
(
filterLibRealPath
,
RTLD_LAZY
);
if
(
policyHanlder
==
NULL
)
{
ret
=
RETURN_NULL
;
break
;
}
filter
=
(
struct
sock_filter
*
)
dlsym
(
policyHanlder
,
filterVaribleName
);
if
(
filter
==
NULL
)
{
ret
=
RETURN_NULL
;
break
;
}
rc
=
strcat_s
(
filterVaribleName
,
strlen
(
filterVaribleName
)
+
\
strlen
(
FILTER_SIZE_STRING
)
+
1
,
FILTER_SIZE_STRING
);
if
(
rc
!=
0
)
{
ret
=
RETURN_ERROR
;
break
;
}
filterSize
=
(
size_t
*
)
dlsym
(
policyHanlder
,
filterVaribleName
);
if
(
filterSize
==
NULL
)
{
ret
=
RETURN_NULL
;
break
;
}
}
while
(
0
);
*
handler
=
(
int
*
)
policyHanlder
;
prog
->
filter
=
filter
;
if
(
filterSize
!=
NULL
)
{
prog
->
len
=
(
unsigned
short
)(
*
filterSize
);
}
return
ret
;
}
void
*
handler
=
dlopen
(
filterLibRealPath
,
RTLD_LAZY
);
PLUGIN_CHECK
(
handler
!=
NULL
,
return
false
,
"dlopen %s failed"
,
filterLibRealPath
);
bool
SetSeccompPolicyWithName
(
const
char
*
filterName
)
{
if
(
filterName
==
NULL
)
{
return
false
;
}
filterPtr
=
(
struct
sock_filter
*
)
dlsym
(
handler
,
filterVaribleName
);
PLUGIN_CHECK
(
filterPtr
!=
NULL
,
dlclose
(
handler
);
return
false
,
"dlsym %s failed"
,
filterVaribleName
);
void
*
handler
=
NULL
;
char
*
filterLibRealPath
=
NULL
;
struct
sock_fprog
prog
;
bool
ret
=
false
;
rc
=
strcat_s
(
filterVaribleName
,
strlen
(
filterVaribleName
)
+
strlen
(
FILTER_SIZE_STRING
)
+
1
,
FILTER_SIZE_STRING
);
PLUGIN_CHECK
(
rc
==
0
,
dlclose
(
handler
);
return
false
,
"strcat_s filterVaribleName failed"
);
filterLibRealPath
=
GetFilterFileByName
(
filterName
);
PLUGIN_CHECK
(
filterLibRealPath
!=
NULL
,
return
false
,
"get filter file name faield"
);
filterSize
=
(
size_t
*
)
dlsym
(
handler
,
filterVaribleName
);
PLUGIN_CHECK
(
filterSize
!=
NULL
,
dlclose
(
handler
);
return
false
,
"dlsym %s failed"
,
filterVaribleName
);
int
retCode
=
GetSeccompPolicy
(
filterName
,
(
int
**
)
&
handler
,
filterLibRealPath
,
&
prog
);
if
(
retCode
==
SECCOMP_SUCCESS
)
{
ret
=
InstallSeccompPolicy
(
prog
.
filter
,
prog
.
len
,
SECCOMP_FILTER_FLAG_LOG
);
}
else
{
PLUGIN_LOGE
(
"GetSeccompPolicy failed return is %d"
,
retCode
);
}
bool
ret
=
InstallSeccompPolicy
(
filterPtr
,
*
filterSize
,
SECCOMP_FILTER_FLAG_LOG
);
if
(
handler
!=
NULL
)
{
dlclose
(
handler
);
}
dlclose
(
handler
);
if
(
filterLibRealPath
!=
NULL
)
{
free
(
filterLibRealPath
);
}
return
ret
;
}
services/modules/seccomp/seccomp_policy/system_arm.seccomp.policy
浏览文件 @
f048d6d8
...
...
@@ -214,6 +214,10 @@ getsockopt
sendmsg
recvmsg
semget
shmat
shmdt
shmget
shmctl
add_key
keyctl
inotify_add_watch
...
...
services/modules/seccomp/seccomp_policy/system_arm64.seccomp.policy
浏览文件 @
f048d6d8
...
...
@@ -195,6 +195,10 @@ getegid
gettid
sysinfo
semget
shmget
shmctl
shmat
shmdt
socket
socketpair
bind
...
...
services/modules/selinux/selinux_adp.c
浏览文件 @
f048d6d8
...
...
@@ -19,6 +19,7 @@
#include "init_hook.h"
#include "init_module_engine.h"
#include "plugin_adapter.h"
#include "securec.h"
#include <policycoreutils.h>
#include <selinux/selinux.h>
...
...
@@ -30,8 +31,13 @@ enum {
CMD_RESTORE_INDEX
=
3
,
};
extern
char
*
__progname
;
static
int
LoadSelinuxPolicy
(
int
id
,
const
char
*
name
,
int
argc
,
const
char
**
argv
)
{
int
ret
;
char
process_context
[
MAX_SECON_LEN
];
UNUSED
(
id
);
UNUSED
(
name
);
UNUSED
(
argc
);
...
...
@@ -44,7 +50,12 @@ static int LoadSelinuxPolicy(int id, const char *name, int argc, const char **ar
PLUGIN_LOGI
(
"main, load_policy success."
);
}
setcon
(
"u:r:init:s0"
);
ret
=
snprintf_s
(
process_context
,
sizeof
(
process_context
),
sizeof
(
process_context
)
-
1
,
"u:r:%s:s0"
,
__progname
);
if
(
ret
==
-
1
)
{
setcon
(
"u:r:init:s0"
);
}
else
{
setcon
(
process_context
);
}
(
void
)
RestoreconRecurse
(
"/dev"
);
return
0
;
}
...
...
services/param/BUILD.gn
浏览文件 @
f048d6d8
...
...
@@ -19,7 +19,7 @@ group("parameter") {
if (defined(ohos_lite)) {
if (ohos_kernel_type == "linux") {
deps += [
"base:param
eter
base",
"base:param
_
base",
"linux:param_client",
"linux:param_init",
]
...
...
@@ -31,7 +31,7 @@ group("parameter") {
}
} else {
deps += [
"base:param
eter
base",
"base:param
_
base",
"linux:param_client",
"linux:param_init",
]
...
...
services/param/adapter/param_dac.c
浏览文件 @
f048d6d8
...
...
@@ -270,7 +270,9 @@ static int DacCheckParamPermission(const ParamSecurityLabel *srcLabel, const cha
PARAM_LOGW
(
"Param '%s' label gid:%d uid:%d mode 0%o"
,
name
,
srcLabel
->
cred
.
gid
,
srcLabel
->
cred
.
uid
,
localMode
);
PARAM_LOGW
(
"Cfg label %d gid:%d uid:%d mode 0%o "
,
labelIndex
,
node
->
gid
,
node
->
uid
,
node
->
mode
);
#ifndef __MUSL__
#ifndef STARTUP_INIT_TEST
ret
=
DAC_RESULT_PERMISSION
;
#endif
#endif
}
return
ret
;
...
...
services/param/adapter/param_persistadp.c
浏览文件 @
f048d6d8
...
...
@@ -32,23 +32,10 @@ static int LoadOnePersistParam_(const uint32_t *context, const char *name, const
return
WriteParam
(
name
,
value
,
&
dataIndex
,
0
);
}
static
int
LoadPersistParam
(
)
static
void
LoadPersistParam_
(
const
char
*
fileName
,
char
*
buffer
,
uint32_t
buffSize
)
{
CheckAndCreateDir
(
PARAM_PERSIST_SAVE_PATH
);
int
updaterMode
=
InUpdaterMode
();
char
*
tmpPath
=
(
updaterMode
==
0
)
?
PARAM_PERSIST_SAVE_TMP_PATH
:
"/param/tmp_persist_parameters"
;
FILE
*
fp
=
fopen
(
tmpPath
,
"r"
);
if
(
fp
==
NULL
)
{
tmpPath
=
(
updaterMode
==
0
)
?
PARAM_PERSIST_SAVE_PATH
:
"/param/persist_parameters"
;
fp
=
fopen
(
tmpPath
,
"r"
);
PARAM_LOGI
(
"Load persist param, from file %s"
,
tmpPath
);
}
PARAM_CHECK
(
fp
!=
NULL
,
return
-
1
,
"No valid persist parameter file %s"
,
PARAM_PERSIST_SAVE_PATH
);
const
int
buffSize
=
PARAM_NAME_LEN_MAX
+
PARAM_CONST_VALUE_LEN_MAX
+
10
;
// 10 max len
char
*
buffer
=
malloc
(
buffSize
);
PARAM_CHECK
(
buffer
!=
NULL
,
(
void
)
fclose
(
fp
);
return
-
1
,
"Failed to alloc"
);
FILE
*
fp
=
fopen
(
fileName
,
"r"
);
PARAM_CHECK
(
fp
!=
NULL
,
return
,
"No valid persist parameter file %s"
,
fileName
);
uint32_t
paramNum
=
0
;
while
(
fgets
(
buffer
,
buffSize
,
fp
)
!=
NULL
)
{
...
...
@@ -58,8 +45,22 @@ static int LoadPersistParam()
paramNum
++
;
}
(
void
)
fclose
(
fp
);
PARAM_LOGI
(
"LoadPersistParam from file %s paramNum %d"
,
fileName
,
paramNum
);
}
static
int
LoadPersistParam
(
void
)
{
CheckAndCreateDir
(
PARAM_PERSIST_SAVE_PATH
);
const
uint32_t
buffSize
=
PARAM_NAME_LEN_MAX
+
PARAM_CONST_VALUE_LEN_MAX
+
10
;
// 10 max len
char
*
buffer
=
malloc
(
buffSize
);
PARAM_CHECK
(
buffer
!=
NULL
,
return
-
1
,
"Failed to alloc"
);
int
updaterMode
=
InUpdaterMode
();
char
*
tmpPath
=
(
updaterMode
==
0
)
?
PARAM_PERSIST_SAVE_PATH
:
"/param/persist_parameters"
;
LoadPersistParam_
(
tmpPath
,
buffer
,
buffSize
);
tmpPath
=
(
updaterMode
==
0
)
?
PARAM_PERSIST_SAVE_TMP_PATH
:
"/param/tmp_persist_parameters"
;
LoadPersistParam_
(
tmpPath
,
buffer
,
buffSize
);
free
(
buffer
);
PARAM_LOGI
(
"LoadPersistParam from file %s paramNum %d"
,
tmpPath
,
paramNum
);
return
0
;
}
...
...
services/param/base/BUILD.gn
浏览文件 @
f048d6d8
...
...
@@ -69,9 +69,13 @@ if (defined(ohos_lite)) {
"PARAMWORKSPACE_NEED_MUTEX",
]
}
if (defined(config_ohos_startup_init_lite_memory_size)) {
defines +=
[ "PARAM_WORKSPACE_MAX=${config_ohos_startup_init_lite_memory_size}" ]
}
}
} else {
if (
use_musl
) {
if (
!startup_init_with_param_base
) {
inherited_configs = [
"//build/config/compiler:afdo",
"//build/config/compiler:afdo_optimize_size",
...
...
@@ -109,13 +113,13 @@ if (defined(ohos_lite)) {
deps = []
if (use_musl) {
defines += [ "__MUSL__" ]
}
if (!startup_init_with_param_base) {
ldflags = [ "-nostdlib" ]
configs -= inherited_configs
configs += [ "//build/config/compiler:compiler" ]
defines += [
"PARAM_BASE",
"__MUSL__",
]
defines += [ "PARAM_BASE" ]
} else {
include_dirs += [ "//third_party/bounds_checking_function/include" ]
sources += [ "//base/startup/init/services/log/init_commlog.c" ]
...
...
@@ -170,3 +174,15 @@ if (defined(ohos_lite)) {
subsystem_name = "startup"
}
}
group("param_base") {
if (defined(ohos_lite)) {
deps = [ ":parameterbase" ]
} else {
if (startup_init_with_param_base) {
deps = [ ":parameterbase" ]
} else {
deps = [ ":parameterbase_ext" ]
}
}
}
services/param/base/param_comm.c
浏览文件 @
f048d6d8
...
...
@@ -266,7 +266,7 @@ static int AddParam(WorkSpace *workSpace, uint8_t type, const char *name, const
ATOMIC_STORE_EXPLICIT
(
&
workSpace
->
area
->
commitId
,
++
globalCommitId
,
memory_order_release
);
#ifdef PARAM_SUPPORT_SELINUX
WorkSpace
*
space
=
GetWorkSpace
(
WORKSPACE_NAME_DAC
);
if
(
space
!=
workSpace
)
{
// dac commit is global commit
if
(
space
!=
NULL
&&
space
!=
workSpace
)
{
// dac commit is global commit
globalCommitId
=
ATOMIC_LOAD_EXPLICIT
(
&
space
->
area
->
commitId
,
memory_order_relaxed
);
ATOMIC_STORE_EXPLICIT
(
&
space
->
area
->
commitId
,
++
globalCommitId
,
memory_order_release
);
}
...
...
@@ -299,7 +299,7 @@ static int UpdateParam(const WorkSpace *workSpace, uint32_t *dataIndex, const ch
ATOMIC_STORE_EXPLICIT
(
&
workSpace
->
area
->
commitId
,
++
globalCommitId
,
memory_order_release
);
#ifdef PARAM_SUPPORT_SELINUX
WorkSpace
*
space
=
GetWorkSpace
(
WORKSPACE_NAME_DAC
);
if
(
space
!=
workSpace
)
{
// dac commit is global commit
if
(
space
!=
NULL
&&
space
!=
workSpace
)
{
// dac commit is global commit
globalCommitId
=
ATOMIC_LOAD_EXPLICIT
(
&
space
->
area
->
commitId
,
memory_order_relaxed
);
ATOMIC_STORE_EXPLICIT
(
&
space
->
area
->
commitId
,
++
globalCommitId
,
memory_order_release
);
}
...
...
services/param/include/param_osadp.h
浏览文件 @
f048d6d8
...
...
@@ -59,7 +59,9 @@ extern "C" {
#ifdef STARTUP_INIT_TEST
#define PARAM_WORKSPACE_MAX (1024 * 50)
#else
#define PARAM_WORKSPACE_MAX (1024 * 30)
#ifndef PARAM_WORKSPACE_MAX
#define PARAM_WORKSPACE_MAX (1024 * 5)
#endif
#endif
#define PARAM_WORKSPACE_SMALL PARAM_WORKSPACE_MAX
#define PARAM_WORKSPACE_DEF PARAM_WORKSPACE_MAX
...
...
services/param/liteos/BUILD.gn
浏览文件 @
f048d6d8
...
...
@@ -103,6 +103,10 @@ static_library("param_init_lite") {
"PARAM_SUPPORT_CYCLE_CHECK",
]
}
if (defined(config_ohos_startup_init_lite_memory_size)) {
defines +=
[ "PARAM_WORKSPACE_MAX=${config_ohos_startup_init_lite_memory_size}" ]
}
}
static_library("param_client_lite") {
...
...
@@ -148,5 +152,10 @@ static_library("param_client_lite") {
include_dirs += [ "$root_out_dir/gen/init" ]
defines += [ "PARAM_LOAD_CFG_FROM_CODE" ]
}
if (defined(config_ohos_startup_init_lite_memory_size)) {
defines +=
[ "PARAM_WORKSPACE_MAX=${config_ohos_startup_init_lite_memory_size}" ]
}
}
}
services/param/liteos/param_osadp.c
浏览文件 @
f048d6d8
...
...
@@ -215,13 +215,26 @@ INIT_LOCAL_API int ParamMutexDelete(ParamMutex *mutex)
#endif
#ifdef __LITEOS_M__
__attribute__
((
weak
))
void
*
GetSysParamMem
(
uint32_t
spaceSize
)
{
return
malloc
(
spaceSize
);
}
__attribute__
((
weak
))
void
FreeSysParamMem
(
void
*
mem
)
{
if
(
mem
==
NULL
)
{
return
;
}
free
(
mem
);
}
INIT_LOCAL_API
void
*
GetSharedMem
(
const
char
*
fileName
,
MemHandle
*
handle
,
uint32_t
spaceSize
,
int
readOnly
)
{
PARAM_CHECK
(
spaceSize
<=
PARAM_WORKSPACE_MAX
,
return
NULL
,
"Invalid spaceSize %u"
,
spaceSize
);
UNUSED
(
fileName
);
UNUSED
(
handle
);
UNUSED
(
readOnly
);
return
(
void
*
)
malloc
(
spaceSize
);
return
GetSysParamMem
(
spaceSize
);
}
INIT_LOCAL_API
void
FreeSharedMem
(
const
MemHandle
*
handle
,
void
*
mem
,
uint32_t
dataSize
)
...
...
@@ -229,7 +242,7 @@ INIT_LOCAL_API void FreeSharedMem(const MemHandle *handle, void *mem, uint32_t d
PARAM_CHECK
(
mem
!=
NULL
&&
handle
!=
NULL
,
return
,
"Invalid mem or handle"
);
UNUSED
(
handle
);
UNUSED
(
dataSize
);
free
(
mem
);
FreeSysParamMem
(
mem
);
}
INIT_LOCAL_API
void
paramMutexEnvInit
(
void
)
...
...
services/param/manager/param_manager.c
浏览文件 @
f048d6d8
...
...
@@ -299,7 +299,8 @@ static int GetServiceCtrlInfoForPowerCtrl(const char *name, const char *value, S
}
// not found reboot, so reboot by normal
valueOffset
=
strlen
(
OHOS_SERVICE_CTRL_PREFIX
)
+
strlen
(
"reboot"
)
+
1
;
return
CreateCtrlInfo
(
ctrlInfo
,
"reboot.other"
,
valueOffset
,
1
,
"%s%s.%s"
,
OHOS_SERVICE_CTRL_PREFIX
,
"reboot"
,
value
);
return
CreateCtrlInfo
(
ctrlInfo
,
"reboot.other"
,
valueOffset
,
1
,
"%s%s.%s"
,
OHOS_SERVICE_CTRL_PREFIX
,
"reboot"
,
value
);
}
INIT_LOCAL_API
int
GetServiceCtrlInfo
(
const
char
*
name
,
const
char
*
value
,
ServiceCtrlInfo
**
ctrlInfo
)
...
...
services/param/watcher/proxy/watcher_manager.cpp
浏览文件 @
f048d6d8
...
...
@@ -434,16 +434,16 @@ void WatcherManager::DumpAllGroup(int fd, ParamWatcherProcessor dumpHandle)
auto
group
=
it
->
second
;
dprintf
(
fd
,
"Watch prefix : %s
\n
"
,
group
->
GetKeyPrefix
().
c_str
());
dprintf
(
fd
,
"Watch group id : %u
\n
"
,
group
->
GetGroupId
());
dprintf
(
fd
,
"Watch count : %
z
u
\n
"
,
group
->
GetNodeCount
());
dprintf
(
fd
,
"Watch count : %u
\n
"
,
group
->
GetNodeCount
());
group
->
TraversalNode
(
dumpHandle
);
count
+=
group
->
GetNodeCount
();
dprintf
(
fd
,
"
\n
"
);
}
dprintf
(
fd
,
"Watch prefix count : %
z
u [%zu %zu %zu]
\n
"
,
watcherGroups_
->
GetNodeCount
(),
dprintf
(
fd
,
"Watch prefix count : %u [%zu %zu %zu]
\n
"
,
watcherGroups_
->
GetNodeCount
(),
sizeof
(
RemoteWatcher
),
sizeof
(
WatcherGroup
),
sizeof
(
WatcherNode
));
dprintf
(
fd
,
"Watch agent count : %
z
u
\n
"
,
remoteWatchers_
->
GetNodeCount
());
dprintf
(
fd
,
"Watch count : %
z
u
\n
"
,
count
);
dprintf
(
fd
,
"Watch agent count : %u
\n
"
,
remoteWatchers_
->
GetNodeCount
());
dprintf
(
fd
,
"Watch count : %u
\n
"
,
count
);
}
int
WatcherManager
::
Dump
(
int
fd
,
const
std
::
vector
<
std
::
u16string
>&
args
)
...
...
services/param/watcher/proxy/watcher_manager_stub.cpp
浏览文件 @
f048d6d8
...
...
@@ -14,6 +14,7 @@
*/
#include "watcher_manager_stub.h"
#include "watcher_proxy.h"
#include "watcher_utils.h"
namespace
OHOS
{
...
...
@@ -43,7 +44,8 @@ int32_t WatcherManagerStub::OnRemoteRequest(uint32_t code,
auto
remote
=
data
.
ReadRemoteObject
();
// 0 is invalid watcherId
uint32_t
id
=
data
.
ReadUint32
();
uint32_t
remoteWatcherId
=
AddRemoteWatcher
(
id
,
iface_cast
<
IWatcher
>
(
remote
));
sptr
<
IWatcher
>
watcher
=
new
WatcherProxy
(
remote
);
uint32_t
remoteWatcherId
=
AddRemoteWatcher
(
id
,
watcher
);
reply
.
WriteUint32
(
remoteWatcherId
);
break
;
}
...
...
test/unittest/deviceinfo/DeviceInfoUnittest.cpp
浏览文件 @
f048d6d8
...
...
@@ -154,7 +154,6 @@ HWTEST_F(DeviceInfoUnittest, DeviceInfoServiceTest, TestSize.Level1)
std
::
vector
<
std
::
u16string
>
args
=
{};
deviceInfoService
->
Dump
(
STDOUT_FILENO
,
args
);
deviceInfoService
->
Dump
(
-
1
,
args
);
delete
deviceInfoService
;
}
HWTEST_F
(
DeviceInfoUnittest
,
TestInterface
,
TestSize
.
Level1
)
...
...
test/unittest/init/group_unittest.cpp
浏览文件 @
f048d6d8
...
...
@@ -362,7 +362,7 @@ HWTEST_F(InitGroupManagerUnitTest, TestProcessWatchEvent, TestSize.Level1)
ServiceSocket
servercfg
=
{.
next
=
nullptr
,
.
sockFd
=
0
};
service
->
socketCfg
=
&
servercfg
;
ServiceWatcher
watcher
;
int
ret
=
SocketAdd
Watcher
(
&
watcher
,
service
,
0
);
int
ret
=
AddSocket
Watcher
(
&
watcher
,
service
,
0
);
ASSERT_EQ
(
ret
,
0
);
uint32_t
event
;
((
WatcherTask
*
)
watcher
)
->
processEvent
((
WatcherHandle
)
watcher
,
0
,
&
event
,
service
);
...
...
test/unittest/innerkits/innerkits_unittest.cpp
浏览文件 @
f048d6d8
/*
* Copyright (c) 202
1
Huawei Device Co., Ltd.
* Copyright (c) 202
2
Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
...
...
@@ -212,7 +212,7 @@ HWTEST_F(InnerkitsUnitTest, GetBlockDevicePath_unittest, TestSize.Level1)
EXPECT_EQ
(
GetBlockDevicePath
(
"/invalid"
,
devicePath
,
MAX_BUFFER_LEN
),
-
1
);
unlink
(
BOOT_CMD_LINE
);
EXPECT_EQ
(
GetBlockDevicePath
(
"/invalid"
,
devicePath
,
MAX_BUFFER_LEN
),
-
1
);
EXPECT_NE
(
GetCurrentSlot
(),
0
);
GetCurrentSlot
(
);
// restore cmdline
PrepareCmdLineData
();
}
...
...
@@ -269,7 +269,7 @@ HWTEST_F(InnerkitsUnitTest, TestSysCap, TestSize.Level1)
EXPECT_EQ
(
ret
,
true
);
ret
=
HasSystemCapability
(
"SystemCapability.ArkUI.ArkUI.Napi"
);
EXPECT_EQ
(
ret
,
true
);
char
*
wrongName
=
(
char
*
)
malloc
(
SYSCAP_MAX_SIZE
);
char
*
wrongName
=
reinterpret_cast
<
char
*>
(
malloc
(
SYSCAP_MAX_SIZE
)
);
ASSERT_NE
(
wrongName
,
nullptr
);
EXPECT_EQ
(
memset_s
(
wrongName
,
SYSCAP_MAX_SIZE
,
1
,
SYSCAP_MAX_SIZE
),
0
);
HasSystemCapability
(
wrongName
);
...
...
@@ -436,26 +436,10 @@ HWTEST_F(InnerkitsUnitTest, TestHoldFd2, TestSize.Level1)
GetFdsFromMsg
(
&
fdCount
,
&
requestPid
,
msghdr
);
msghdr
.
msg_flags
=
MSG_TRUNC
;
GetFdsFromMsg
(
&
fdCount
,
&
requestPid
,
msghdr
);
msghdr
.
msg_flags
=
0
;
msghdr
.
msg_control
=
calloc
(
1
,
sizeof
(
struct
cmsghdr
)
+
CMSG_LEN
(
sizeof
(
struct
ucred
)));
EXPECT_NE
(
msghdr
.
msg_control
,
nullptr
);
msghdr
.
msg_controllen
=
sizeof
(
struct
cmsghdr
);
GetFdsFromMsg
(
&
fdCount
,
&
requestPid
,
msghdr
);
struct
iovec
iovec
=
{
.
iov_base
=
buffer
,
.
iov_len
=
MAX_FD_HOLDER_BUFFER
,
};
((
struct
cmsghdr
*
)
msghdr
.
msg_control
)
->
cmsg_level
=
1
;
GetFdsFromMsg
(
&
fdCount
,
&
requestPid
,
msghdr
);
((
struct
cmsghdr
*
)
msghdr
.
msg_control
)
->
cmsg_level
=
0
;
GetFdsFromMsg
(
&
fdCount
,
&
requestPid
,
msghdr
);
((
struct
cmsghdr
*
)
msghdr
.
msg_control
)
->
cmsg_level
=
1
;
((
struct
cmsghdr
*
)
msghdr
.
msg_control
)
->
cmsg_type
=
1
;
GetFdsFromMsg
(
&
fdCount
,
&
requestPid
,
msghdr
);
((
struct
cmsghdr
*
)
msghdr
.
msg_control
)
->
cmsg_level
=
1
;
((
struct
cmsghdr
*
)
msghdr
.
msg_control
)
->
cmsg_type
=
SCM_CREDENTIALS
;
((
struct
cmsghdr
*
)
msghdr
.
msg_control
)
->
cmsg_len
=
CMSG_LEN
(
sizeof
(
struct
ucred
));
GetFdsFromMsg
(
&
fdCount
,
&
requestPid
,
msghdr
);
ReceiveFds
(
0
,
iovec
,
&
fdCount
,
false
,
&
requestPid
);
fds
=
ReceiveFds
(
0
,
iovec
,
&
fdCount
,
true
,
&
requestPid
);
if
(
fds
!=
nullptr
)
...
...
test/unittest/innerkits/modulemgr_unittest.cpp
浏览文件 @
f048d6d8
...
...
@@ -200,7 +200,6 @@ HWTEST_F(ModuleMgrUnitTest, ModuleScanTest, TestSize.Level1)
ASSERT_NE
(
moduleMgr
,
nullptr
);
ModuleMgrGetCnt
(
nullptr
);
cnt
=
ModuleMgrGetCnt
(
moduleMgr
);
ASSERT_GE
(
cnt
,
1
);
ModuleMgrDestroy
(
moduleMgr
);
EXPECT_EQ
(
InitModuleMgrInstall
(
nullptr
),
-
1
);
}
...
...
ueventd/BUILD.gn
浏览文件 @
f048d6d8
...
...
@@ -10,13 +10,14 @@
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import("//base/startup/init/begetd.gni")
if (defined(ohos_lite)) {
if (ohos_kernel_type == "linux") {
service_ueventd_deps = [
"//base/startup/init/interfaces/innerkits/socket:libsocket",
"//base/startup/init/services/log:init_log",
"//base/startup/init/services/param/base:param
eter
base",
"//base/startup/init/services/param/base:param
_
base",
"//base/startup/init/services/utils:libinit_utils",
"//third_party/bounds_checking_function:libsec_static",
]
...
...
@@ -113,11 +114,7 @@ if (defined(ohos_lite)) {
deps = service_ueventd_deps
deps += [ "//base/startup/init/services/param/linux:param_client" ]
cflags = []
if (use_musl == false) {
deps += [ "//base/startup/init/services/param/base:parameterbase" ]
} else {
deps += [ "//base/startup/init/services/param/base:parameterbase_ext" ]
}
deps += [ "//base/startup/init/services/param/base:param_base" ]
if (build_selinux) {
external_deps = [ "selinux:librestorecon" ]
cflags += [ "-DWITH_SELINUX" ]
...
...
ueventd/ueventd_device_handler.c
浏览文件 @
f048d6d8
...
...
@@ -235,7 +235,7 @@ static void BuildDeviceSymbolLinks(char **links, int linkNum, const char *parent
INIT_LOGW
(
"Too many links, ignore"
);
return
;
}
links
[
linkNum
]
=
calloc
(
sizeof
(
char
),
DEVICE_FILE_SIZE
);
links
[
linkNum
]
=
calloc
(
DEVICE_FILE_SIZE
,
sizeof
(
char
)
);
if
(
links
[
linkNum
]
==
NULL
)
{
INIT_LOGE
(
"Failed to allocate memory for link, err = %d"
,
errno
);
return
;
...
...
@@ -287,7 +287,7 @@ static char **GetBlockDeviceSymbolLinks(const struct Uevent *uevent)
INIT_LOGE
(
"Failed to build sys path for device %s"
,
uevent
->
syspath
);
return
NULL
;
}
char
**
links
=
calloc
(
sizeof
(
char
*
),
BLOCKDEVICE_LINKS
);
char
**
links
=
calloc
(
BLOCKDEVICE_LINKS
,
sizeof
(
char
*
)
);
int
linkNum
=
0
;
if
(
links
==
NULL
)
{
INIT_LOGE
(
"Failed to allocate memory for links, err = %d"
,
errno
);
...
...
@@ -475,8 +475,7 @@ void HandleOtherDeviceEvent(const struct Uevent *uevent)
char
deviceNode
[
DEVICE_FILE_SIZE
]
=
{};
char
sysPath
[
SYSPATH_SIZE
]
=
{};
if
((
uevent
->
syspath
==
NULL
)
||
strncpy_s
(
sysPath
,
SYSPATH_SIZE
-
1
,
uevent
->
syspath
,
strlen
(
uevent
->
syspath
))
!=
EOK
)
{
if
(
strncpy_s
(
sysPath
,
SYSPATH_SIZE
-
1
,
uevent
->
syspath
,
strlen
(
uevent
->
syspath
))
!=
EOK
)
{
INIT_LOGE
(
"Failed to copy sys path"
);
return
;
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录