提交 bc97587a 编写于 作者: G GengYinzong

fix code error

Signed-off-by: NGengYinzong <gengyinzong@huawei.com>
Change-Id: Ib6991a8bb49dad643688c961d4c729e97c70681b
上级 27a433b0
......@@ -104,15 +104,6 @@ def is_function_name_exist(arch, function_name, func_name_nr_table):
raise ValidateError('{} not exsit in {} function_name_nr_table Table'.format(function_name, arch))
def is_function_name_repeats(func_name, allow_list_with_args):
for line in allow_list_with_args:
pos = line.find(':')
function_name = line[:pos]
if func_name == function_name:
return True
return False
def is_errno_in_valid_range(errno):
if int(errno) > 0 and int(errno) <= 255 and errno.isdigit():
return True
......@@ -313,22 +304,16 @@ class SeccompPolicyParam:
def update_final_list(self):
#remove duplicate function_name
self.priority_with_args = set(item for item in self.priority_with_args)
priority_function_name_list_with_args = set(item[:item.find(':')] for item in self.priority_with_args)
self.allow_list_with_args = set(item
for item in self.allow_list_with_args
if item[:item.find(':')] not in priority_function_name_list_with_args)
function_name_list_with_args = set(item[:item.find(':')] for item in self.allow_list_with_args)
self.final_allow_list |= self.allow_list - self.priority - function_name_list_with_args - \
priority_function_name_list_with_args
self.final_priority |= self.priority - function_name_list_with_args - \
priority_function_name_list_with_args
self.final_allow_list |= self.allow_list
self.final_priority |= self.priority
self.final_allow_list_with_args |= self.allow_list_with_args
self.final_priority_with_args |= self.priority_with_args
for line in self.final_allow_list.copy():
if is_function_name_repeats(line, self.final_allow_list_with_args):
self.final_allow_list.remove(line)
final_priority_function_name_list_with_args = set(item[:item.find(':')] for item in self.final_priority_with_args)
final_function_name_list_with_args = set(item[:item.find(':')] for item in self.final_allow_list_with_args)
self.final_allow_list |= self.final_allow_list - self.final_priority - \
final_priority_function_name_list_with_args - final_function_name_list_with_args
self.final_priority |= self.final_priority - final_priority_function_name_list_with_args - \
final_function_name_list_with_args
self.clear_list()
......
......@@ -217,8 +217,8 @@ public:
static bool CheckSetuid64ForUidFilter1()
{
int uid = syscall(__NR_setuid, 0);
if (uid == 0) {
int ret = syscall(__NR_setuid, 0);
if (ret == 0) {
return true;
}
......@@ -227,8 +227,8 @@ public:
static bool CheckSetuid64ForUidFilter2()
{
int uid = syscall(__NR_setuid, 2);
if (uid == 0) {
int ret = syscall(__NR_setuid, 2);
if (ret == 0) {
return true;
}
......@@ -237,8 +237,8 @@ public:
static bool CheckSetreuid64ForUidFilter1()
{
int uid = syscall(__NR_setreuid, 0, 2);
if (uid == 0) {
int ret = syscall(__NR_setreuid, 0, 2);
if (ret == 0) {
return true;
}
......@@ -247,8 +247,8 @@ public:
static bool CheckSetreuid64ForUidFilter2()
{
int uid = syscall(__NR_setreuid, 2, 0);
if (uid == 0) {
int ret = syscall(__NR_setreuid, 2, 0);
if (ret == 0) {
return true;
}
......@@ -257,8 +257,8 @@ public:
static bool CheckSetreuid64ForUidFilter3()
{
int uid = syscall(__NR_setreuid, 0, 0);
if (uid == 0) {
int ret = syscall(__NR_setreuid, 0, 0);
if (ret == 0) {
return true;
}
......@@ -267,8 +267,8 @@ public:
static bool CheckSetreuid64ForUidFilter4()
{
int uid = syscall(__NR_setreuid, 2, 2);
if (uid == 0) {
int ret = syscall(__NR_setreuid, 2, 2);
if (ret == 0) {
return true;
}
......@@ -277,8 +277,8 @@ public:
static bool CheckSetfsuid64ForUidFilter1()
{
int uid = syscall(__NR_setfsuid, 0);
if (uid == 0) {
int ret = syscall(__NR_setfsuid, 0);
if (ret == 0) {
return true;
}
......@@ -287,8 +287,8 @@ public:
static bool CheckSetfsuid64ForUidFilter2()
{
int uid = syscall(__NR_setfsuid, 2);
if (uid == 0) {
int ret = syscall(__NR_setfsuid, 2);
if (ret == 0) {
return true;
}
......@@ -297,8 +297,8 @@ public:
static bool CheckSetresuid64ForUidFilter1()
{
int uid = syscall(__NR_setresuid, 0, 0, 0);
if (uid == 0) {
int ret = syscall(__NR_setresuid, 0, 0, 0);
if (ret == 0) {
return true;
}
......@@ -307,8 +307,8 @@ public:
static bool CheckSetresuid64ForUidFilter2()
{
int uid = syscall(__NR_setresuid, 2, 0, 0);
if (uid == 0) {
int ret = syscall(__NR_setresuid, 2, 0, 0);
if (ret == 0) {
return true;
}
......@@ -317,8 +317,8 @@ public:
static bool CheckSetresuid64ForUidFilter3()
{
int uid = syscall(__NR_setresuid, 0, 2, 0);
if (uid == 0) {
int ret = syscall(__NR_setresuid, 0, 2, 0);
if (ret == 0) {
return true;
}
......@@ -327,8 +327,8 @@ public:
static bool CheckSetresuid64ForUidFilter4()
{
int uid = syscall(__NR_setresuid, 0, 0, 2);
if (uid == 0) {
int ret = syscall(__NR_setresuid, 0, 0, 2);
if (ret == 0) {
return true;
}
......@@ -337,8 +337,8 @@ public:
static bool CheckSetresuid64ForUidFilter5()
{
int uid = syscall(__NR_setresuid, 0, 2, 2);
if (uid == 0) {
int ret = syscall(__NR_setresuid, 0, 2, 2);
if (ret == 0) {
return true;
}
......@@ -347,8 +347,8 @@ public:
static bool CheckSetresuid64ForUidFilter6()
{
int uid = syscall(__NR_setresuid, 2, 0, 2);
if (uid == 0) {
int ret = syscall(__NR_setresuid, 2, 0, 2);
if (ret == 0) {
return true;
}
......@@ -357,8 +357,8 @@ public:
static bool CheckSetresuid64ForUidFilter7()
{
int uid = syscall(__NR_setresuid, 2, 2, 0);
if (uid == 0) {
int ret = syscall(__NR_setresuid, 2, 2, 0);
if (ret == 0) {
return true;
}
......@@ -367,8 +367,8 @@ public:
static bool CheckSetresuid64ForUidFilter8()
{
int uid = syscall(__NR_setresuid, 2, 2, 2);
if (uid == 0) {
int ret = syscall(__NR_setresuid, 2, 2, 2);
if (ret == 0) {
return true;
}
......@@ -384,9 +384,12 @@ public:
// system allowlist
ret = CheckSyscall(SYSTEM_SA, SYSTEM_NAME, CheckGetpid, true);
EXPECT_EQ(ret, 0);
}
// system_uid_filter_test
ret = CheckSyscall(SYSTEM_SA, SYSTEM_NAME, CheckSetuid64ForUidFilter1, false);
void TestSystemSyscallForUidFilter()
{
// system_uid_filter_64bit_test
int ret = CheckSyscall(SYSTEM_SA, SYSTEM_NAME, CheckSetuid64ForUidFilter1, false);
EXPECT_EQ(ret, 0);
ret = CheckSyscall(SYSTEM_SA, SYSTEM_NAME, CheckSetuid64ForUidFilter2, true);
......@@ -507,8 +510,8 @@ public:
static bool CheckSetuid32ForUidFilter1()
{
int uid = syscall(__NR_setuid32, 0);
if (uid == 0) {
int ret = syscall(__NR_setuid32, 0);
if (ret == 0) {
return true;
}
......@@ -517,8 +520,8 @@ public:
static bool CheckSetuid32ForUidFilter2()
{
int uid = syscall(__NR_setuid32, 2);
if (uid == 0) {
int ret = syscall(__NR_setuid32, 2);
if (ret == 0) {
return true;
}
......@@ -527,8 +530,8 @@ public:
static bool CheckSetuid16ForUidFilter1()
{
int uid = syscall(__NR_setuid, 0);
if (uid == 0) {
int ret = syscall(__NR_setuid, 0);
if (ret == 0) {
return true;
}
......@@ -537,8 +540,8 @@ public:
static bool CheckSetuid16ForUidFilter2()
{
int uid = syscall(__NR_setuid, 2);
if (uid == 0) {
int ret = syscall(__NR_setuid, 2);
if (ret == 0) {
return true;
}
......@@ -547,8 +550,8 @@ public:
static bool CheckSetreuid32ForUidFilter1()
{
int uid = syscall(__NR_setreuid32, 0, 2);
if (uid == 0) {
int ret = syscall(__NR_setreuid32, 0, 2);
if (ret == 0) {
return true;
}
......@@ -557,8 +560,8 @@ public:
static bool CheckSetreuid32ForUidFilter2()
{
int uid = syscall(__NR_setreuid32, 2, 0);
if (uid == 0) {
int ret = syscall(__NR_setreuid32, 2, 0);
if (ret == 0) {
return true;
}
......@@ -567,8 +570,8 @@ public:
static bool CheckSetreuid32ForUidFilter3()
{
int uid = syscall(__NR_setreuid32, 0, 0);
if (uid == 0) {
int ret = syscall(__NR_setreuid32, 0, 0);
if (ret == 0) {
return true;
}
......@@ -577,8 +580,8 @@ public:
static bool CheckSetreuid32ForUidFilter4()
{
int uid = syscall(__NR_setreuid32, 2, 2);
if (uid == 0) {
int ret = syscall(__NR_setreuid32, 2, 2);
if (ret == 0) {
return true;
}
......@@ -587,8 +590,8 @@ public:
static bool CheckSetreuid16ForUidFilter1()
{
int uid = syscall(__NR_setreuid, 0, 2);
if (uid == 0) {
int ret = syscall(__NR_setreuid, 0, 2);
if (ret == 0) {
return true;
}
......@@ -597,8 +600,8 @@ public:
static bool CheckSetreuid16ForUidFilter2()
{
int uid = syscall(__NR_setreuid, 2, 0);
if (uid == 0) {
int ret = syscall(__NR_setreuid, 2, 0);
if (ret == 0) {
return true;
}
......@@ -607,8 +610,8 @@ public:
static bool CheckSetreuid16ForUidFilter3()
{
int uid = syscall(__NR_setreuid, 0, 0);
if (uid == 0) {
int ret = syscall(__NR_setreuid, 0, 0);
if (ret == 0) {
return true;
}
......@@ -617,8 +620,8 @@ public:
static bool CheckSetreuid16ForUidFilter4()
{
int uid = syscall(__NR_setreuid, 2, 2);
if (uid == 0) {
int ret = syscall(__NR_setreuid, 2, 2);
if (ret == 0) {
return true;
}
......@@ -627,8 +630,8 @@ public:
static bool CheckSetfsuid32ForUidFilter1()
{
int uid = syscall(__NR_setfsuid32, 0);
if (uid == 0) {
int ret = syscall(__NR_setfsuid32, 0);
if (ret == 0) {
return true;
}
......@@ -637,8 +640,8 @@ public:
static bool CheckSetfsuid32ForUidFilter2()
{
int uid = syscall(__NR_setfsuid32, 2);
if (uid == 0) {
int ret = syscall(__NR_setfsuid32, 2);
if (ret == 0) {
return true;
}
......@@ -647,8 +650,8 @@ public:
static bool CheckSetfsuid16ForUidFilter1()
{
int uid = syscall(__NR_setfsuid, 0);
if (uid == 0) {
int ret = syscall(__NR_setfsuid, 0);
if (ret == 0) {
return true;
}
......@@ -657,8 +660,8 @@ public:
static bool CheckSetfsuid16ForUidFilter2()
{
int uid = syscall(__NR_setfsuid, 2);
if (uid == 0) {
int ret = syscall(__NR_setfsuid, 2);
if (ret == 0) {
return true;
}
......@@ -667,8 +670,8 @@ public:
static bool CheckSetresuid32ForUidFilter1()
{
int uid = syscall(__NR_setresuid32, 0, 0, 0);
if (uid == 0) {
int ret = syscall(__NR_setresuid32, 0, 0, 0);
if (ret == 0) {
return true;
}
......@@ -677,8 +680,8 @@ public:
static bool CheckSetresuid32ForUidFilter2()
{
int uid = syscall(__NR_setresuid32, 2, 0, 0);
if (uid == 0) {
int ret = syscall(__NR_setresuid32, 2, 0, 0);
if (ret == 0) {
return true;
}
......@@ -687,8 +690,8 @@ public:
static bool CheckSetresuid32ForUidFilter3()
{
int uid = syscall(__NR_setresuid32, 0, 2, 0);
if (uid == 0) {
int ret = syscall(__NR_setresuid32, 0, 2, 0);
if (ret == 0) {
return true;
}
......@@ -697,8 +700,8 @@ public:
static bool CheckSetresuid32ForUidFilter4()
{
int uid = syscall(__NR_setresuid32, 0, 0, 2);
if (uid == 0) {
int ret = syscall(__NR_setresuid32, 0, 0, 2);
if (ret == 0) {
return true;
}
......@@ -707,8 +710,8 @@ public:
static bool CheckSetresuid32ForUidFilter5()
{
int uid = syscall(__NR_setresuid32, 0, 2, 2);
if (uid == 0) {
int ret = syscall(__NR_setresuid32, 0, 2, 2);
if (ret == 0) {
return true;
}
......@@ -717,8 +720,8 @@ public:
static bool CheckSetresuid32ForUidFilter6()
{
int uid = syscall(__NR_setresuid32, 2, 0, 2);
if (uid == 0) {
int ret = syscall(__NR_setresuid32, 2, 0, 2);
if (ret == 0) {
return true;
}
......@@ -727,8 +730,8 @@ public:
static bool CheckSetresuid32ForUidFilter7()
{
int uid = syscall(__NR_setresuid32, 2, 2, 0);
if (uid == 0) {
int ret = syscall(__NR_setresuid32, 2, 2, 0);
if (ret == 0) {
return true;
}
......@@ -737,8 +740,8 @@ public:
static bool CheckSetresuid32ForUidFilter8()
{
int uid = syscall(__NR_setresuid32, 2, 2, 2);
if (uid == 0) {
int ret = syscall(__NR_setresuid32, 2, 2, 2);
if (ret == 0) {
return true;
}
......@@ -747,8 +750,8 @@ public:
static bool CheckSetresuid16ForUidFilter1()
{
int uid = syscall(__NR_setresuid, 0, 0, 0);
if (uid == 0) {
int ret = syscall(__NR_setresuid, 0, 0, 0);
if (ret == 0) {
return true;
}
......@@ -757,8 +760,8 @@ public:
static bool CheckSetresuid16ForUidFilter2()
{
int uid = syscall(__NR_setresuid, 2, 0, 0);
if (uid == 0) {
int ret = syscall(__NR_setresuid, 2, 0, 0);
if (ret == 0) {
return true;
}
......@@ -767,8 +770,8 @@ public:
static bool CheckSetresuid16ForUidFilter3()
{
int uid = syscall(__NR_setresuid, 0, 2, 0);
if (uid == 0) {
int ret = syscall(__NR_setresuid, 0, 2, 0);
if (ret == 0) {
return true;
}
......@@ -777,8 +780,8 @@ public:
static bool CheckSetresuid16ForUidFilter4()
{
int uid = syscall(__NR_setresuid, 0, 0, 2);
if (uid == 0) {
int ret = syscall(__NR_setresuid, 0, 0, 2);
if (ret == 0) {
return true;
}
......@@ -787,8 +790,8 @@ public:
static bool CheckSetresuid16ForUidFilter5()
{
int uid = syscall(__NR_setresuid, 0, 2, 2);
if (uid == 0) {
int ret = syscall(__NR_setresuid, 0, 2, 2);
if (ret == 0) {
return true;
}
......@@ -797,8 +800,8 @@ public:
static bool CheckSetresuid16ForUidFilter6()
{
int uid = syscall(__NR_setresuid, 2, 0, 2);
if (uid == 0) {
int ret = syscall(__NR_setresuid, 2, 0, 2);
if (ret == 0) {
return true;
}
......@@ -807,8 +810,8 @@ public:
static bool CheckSetresuid16ForUidFilter7()
{
int uid = syscall(__NR_setresuid, 2, 2, 0);
if (uid == 0) {
int ret = syscall(__NR_setresuid, 2, 2, 0);
if (ret == 0) {
return true;
}
......@@ -817,8 +820,8 @@ public:
static bool CheckSetresuid16ForUidFilter8()
{
int uid = syscall(__NR_setresuid, 2, 2, 2);
if (uid == 0) {
int ret = syscall(__NR_setresuid, 2, 2, 2);
if (ret == 0) {
return true;
}
......@@ -834,20 +837,17 @@ public:
// system allowlist
ret = CheckSyscall(SYSTEM_SA, SYSTEM_NAME, CheckGetuid32, true);
EXPECT_EQ(ret, 0);
}
// system_uid_filter_test
ret = CheckSyscall(SYSTEM_SA, SYSTEM_NAME, CheckSetuid32ForUidFilter1, false);
void TestSystemSyscallForUidFilter32Bit()
{
// system_uid_filter_32bit_test
int ret = CheckSyscall(SYSTEM_SA, SYSTEM_NAME, CheckSetuid32ForUidFilter1, false);
EXPECT_EQ(ret, 0);
ret = CheckSyscall(SYSTEM_SA, SYSTEM_NAME, CheckSetuid32ForUidFilter2, true);
EXPECT_EQ(ret, 0);
ret = CheckSyscall(SYSTEM_SA, SYSTEM_NAME, CheckSetuid16ForUidFilter1, false);
EXPECT_EQ(ret, 0);
ret = CheckSyscall(SYSTEM_SA, SYSTEM_NAME, CheckSetuid16ForUidFilter2, true);
EXPECT_EQ(ret, 0);
ret = CheckSyscall(SYSTEM_SA, SYSTEM_NAME, CheckSetreuid32ForUidFilter1, false);
EXPECT_EQ(ret, 0);
......@@ -860,52 +860,62 @@ public:
ret = CheckSyscall(SYSTEM_SA, SYSTEM_NAME, CheckSetreuid32ForUidFilter4, true);
EXPECT_EQ(ret, 0);
ret = CheckSyscall(SYSTEM_SA, SYSTEM_NAME, CheckSetreuid16ForUidFilter1, false);
ret = CheckSyscall(SYSTEM_SA, SYSTEM_NAME, CheckSetfsuid32ForUidFilter1, false);
EXPECT_EQ(ret, 0);
ret = CheckSyscall(SYSTEM_SA, SYSTEM_NAME, CheckSetreuid16ForUidFilter2, false);
ret = CheckSyscall(SYSTEM_SA, SYSTEM_NAME, CheckSetfsuid32ForUidFilter2, true);
EXPECT_EQ(ret, 0);
ret = CheckSyscall(SYSTEM_SA, SYSTEM_NAME, CheckSetreuid16ForUidFilter3, false);
ret = CheckSyscall(SYSTEM_SA, SYSTEM_NAME, CheckSetresuid32ForUidFilter1, false);
EXPECT_EQ(ret, 0);
ret = CheckSyscall(SYSTEM_SA, SYSTEM_NAME, CheckSetreuid16ForUidFilter4, true);
ret = CheckSyscall(SYSTEM_SA, SYSTEM_NAME, CheckSetresuid32ForUidFilter2, false);
EXPECT_EQ(ret, 0);
ret = CheckSyscall(SYSTEM_SA, SYSTEM_NAME, CheckSetfsuid32ForUidFilter1, false);
ret = CheckSyscall(SYSTEM_SA, SYSTEM_NAME, CheckSetresuid32ForUidFilter3, false);
EXPECT_EQ(ret, 0);
ret = CheckSyscall(SYSTEM_SA, SYSTEM_NAME, CheckSetfsuid32ForUidFilter2, true);
ret = CheckSyscall(SYSTEM_SA, SYSTEM_NAME, CheckSetresuid32ForUidFilter4, false);
EXPECT_EQ(ret, 0);
ret = CheckSyscall(SYSTEM_SA, SYSTEM_NAME, CheckSetfsuid16ForUidFilter1, false);
ret = CheckSyscall(SYSTEM_SA, SYSTEM_NAME, CheckSetresuid32ForUidFilter5, false);
EXPECT_EQ(ret, 0);
ret = CheckSyscall(SYSTEM_SA, SYSTEM_NAME, CheckSetfsuid16ForUidFilter2, true);
ret = CheckSyscall(SYSTEM_SA, SYSTEM_NAME, CheckSetresuid32ForUidFilter6, false);
EXPECT_EQ(ret, 0);
ret = CheckSyscall(SYSTEM_SA, SYSTEM_NAME, CheckSetresuid32ForUidFilter1, false);
ret = CheckSyscall(SYSTEM_SA, SYSTEM_NAME, CheckSetresuid32ForUidFilter7, false);
EXPECT_EQ(ret, 0);
ret = CheckSyscall(SYSTEM_SA, SYSTEM_NAME, CheckSetresuid32ForUidFilter2, false);
ret = CheckSyscall(SYSTEM_SA, SYSTEM_NAME, CheckSetresuid32ForUidFilter8, true);
EXPECT_EQ(ret, 0);
}
ret = CheckSyscall(SYSTEM_SA, SYSTEM_NAME, CheckSetresuid32ForUidFilter3, false);
void TestSystemSyscallForUidFilter16Bit()
{
// system_uid_filter_16bit_test
int ret = CheckSyscall(SYSTEM_SA, SYSTEM_NAME, CheckSetuid16ForUidFilter1, false);
EXPECT_EQ(ret, 0);
ret = CheckSyscall(SYSTEM_SA, SYSTEM_NAME, CheckSetresuid32ForUidFilter4, false);
ret = CheckSyscall(SYSTEM_SA, SYSTEM_NAME, CheckSetuid16ForUidFilter2, true);
EXPECT_EQ(ret, 0);
ret = CheckSyscall(SYSTEM_SA, SYSTEM_NAME, CheckSetresuid32ForUidFilter5, false);
ret = CheckSyscall(SYSTEM_SA, SYSTEM_NAME, CheckSetreuid16ForUidFilter1, false);
EXPECT_EQ(ret, 0);
ret = CheckSyscall(SYSTEM_SA, SYSTEM_NAME, CheckSetresuid32ForUidFilter6, false);
ret = CheckSyscall(SYSTEM_SA, SYSTEM_NAME, CheckSetreuid16ForUidFilter2, false);
EXPECT_EQ(ret, 0);
ret = CheckSyscall(SYSTEM_SA, SYSTEM_NAME, CheckSetresuid32ForUidFilter7, false);
ret = CheckSyscall(SYSTEM_SA, SYSTEM_NAME, CheckSetreuid16ForUidFilter3, false);
EXPECT_EQ(ret, 0);
ret = CheckSyscall(SYSTEM_SA, SYSTEM_NAME, CheckSetresuid32ForUidFilter8, true);
ret = CheckSyscall(SYSTEM_SA, SYSTEM_NAME, CheckSetreuid16ForUidFilter4, true);
EXPECT_EQ(ret, 0);
ret = CheckSyscall(SYSTEM_SA, SYSTEM_NAME, CheckSetfsuid16ForUidFilter1, false);
EXPECT_EQ(ret, 0);
ret = CheckSyscall(SYSTEM_SA, SYSTEM_NAME, CheckSetfsuid16ForUidFilter2, true);
EXPECT_EQ(ret, 0);
ret = CheckSyscall(SYSTEM_SA, SYSTEM_NAME, CheckSetresuid16ForUidFilter1, false);
......@@ -933,6 +943,12 @@ public:
EXPECT_EQ(ret, 0);
}
void TestSystemSyscallForUidFilter()
{
TestSystemSyscallForUidFilter32Bit();
TestSystemSyscallForUidFilter16Bit();
}
void TestSetUidGidFilter()
{
// system blocklist
......@@ -992,4 +1008,16 @@ HWTEST_F(SeccompUnitTest, TestAppSycall, TestSize.Level1)
SeccompUnitTest test;
test.TestAppSycall();
}
/**
* @tc.name: TestSystemSyscallForUidFilter
* @tc.desc: Verify the system seccomp policy.
* @tc.type: FUNC
* @tc.require: issueI7QET2
*/
HWTEST_F(SeccompUnitTest, TestSystemSyscallForUidFilter, TestSize.Level1)
{
SeccompUnitTest test;
test.TestSystemSyscallForUidFilter();
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册