Compare commits

...

4 Commits

Author SHA1 Message Date
openharmony_ci
bad1880ccb !1052 open时可能绕过fatfs 锁
Merge pull request !1052 from wangchen/0423_m
2023-05-15 12:49:09 +00:00
openharmony_ci
f996b22137 !1062 部件化整改
Merge pull request !1062 from zhushengle/deps
2023-05-09 14:55:21 +00:00
zhushengle
02147f4613 feat: 部件化整改
Close #I71QQ2

Signed-off-by: zhushengle <zhushengle@huawei.com>
Change-Id: I247fdc1cbc7cb48c8ff1c1c3e4553ad4e6ef87a9
2023-05-09 21:43:12 +08:00
wangchen
062235a60c fix: open时可能绕过fatfs 锁
方案描述:
1, malloc 之后 清空内存,避免使用上次的指针脏数据

fix I6XVKR
Signed-off-by: wangchen <wangchen240@huawei.com>
2023-04-24 15:36:35 +08:00
3 changed files with 130 additions and 5 deletions

View File

@@ -36,7 +36,7 @@
],
"rom": "300KB",
"ram": "100KB",
"external_deps": {
"deps": {
"components": [
"utils_lite"
],
@@ -58,4 +58,4 @@
"test": []
}
}
}
}

View File

@@ -387,7 +387,8 @@ int FatfsOpen(struct File *file, const char *path, int oflag)
errno = ENOMEM;
return (int)LOS_NOK;
}
(void)memset_s(fp, sizeof(FIL), 0, sizeof(FIL));
ret = FsChangeDrive(path);
if (ret != (int)LOS_OK) {
PRINT_ERR("FAT open ChangeDrive err 0x%x!\r\n", ret);
@@ -675,7 +676,8 @@ int FatfsOpendir(struct Dir *dir, const char *dirName)
errno = ENOENT;
return (int)LOS_NOK;
}
(void)memset_s(dp, sizeof(DIR), 0, sizeof(DIR));
res = f_opendir(dp, dirName);
if (res != FR_OK) {
PRINT_ERR("FAT opendir err 0x%x!\r\n", res);

View File

@@ -1723,7 +1723,125 @@ LITE_TEST_CASE(PosixFsFuncTestSuite, testFsOpen005, Function | MediumTest | Leve
}
/* *
* @tc.number SUB_KERNEL_FS_CLOSE_005
* @tc.number SUB_KERNEL_FS_OPEN_006
* @tc.name open ro + ro
* @tc.desc [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(PosixFsFuncTestSuite, testFsOpen006, Function | MediumTest | Level1)
{
int32_t ret;
const char tmpFileName[TEST_BUF_SIZE] = { FILE1 };
int32_t fd = open(tmpFileName, O_CREAT | O_RDWR, TEST_MODE_HIGH);
ICUNIT_ASSERT_NOT_EQUAL(fd, POSIX_FS_IS_ERROR, fd);
ret = close(fd);
ICUNIT_ASSERT_NOT_EQUAL(ret, POSIX_FS_IS_ERROR, ret);
int32_t fd1 = open(tmpFileName, O_RDONLY, TEST_MODE_NORMAL);
ICUNIT_ASSERT_NOT_EQUAL(fd, POSIX_FS_IS_ERROR, fd1);
int32_t fd2 = open(tmpFileName, O_RDONLY, TEST_MODE_NORMAL);
ICUNIT_ASSERT_NOT_EQUAL(fd2, POSIX_FS_IS_ERROR, fd2);
int32_t fd3 = open(tmpFileName, O_RDONLY, TEST_MODE_NORMAL);
ICUNIT_ASSERT_NOT_EQUAL(fd3, POSIX_FS_IS_ERROR, fd3);
ret = close(fd1);
ICUNIT_ASSERT_NOT_EQUAL(ret, POSIX_FS_IS_ERROR, ret);
ret = close(fd2);
ICUNIT_ASSERT_NOT_EQUAL(ret, POSIX_FS_IS_ERROR, ret);
ret = close(fd3);
ICUNIT_ASSERT_NOT_EQUAL(ret, POSIX_FS_IS_ERROR, ret);
ret = unlink(tmpFileName);
ICUNIT_ASSERT_NOT_EQUAL(ret, POSIX_FS_IS_ERROR, ret);
return POSIX_FS_NO_ERROR;
}
/* *
* @tc.number SUB_KERNEL_FS_OPEN_007
* @tc.name open rw + rw
* @tc.desc [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(PosixFsFuncTestSuite, testFsOpen007, Function | MediumTest | Level1)
{
int32_t ret;
const char tmpFileName[TEST_BUF_SIZE] = { FILE1 };
int32_t fd = open(tmpFileName, O_CREAT | O_RDWR, TEST_MODE_HIGH);
ICUNIT_ASSERT_NOT_EQUAL(fd, POSIX_FS_IS_ERROR, fd);
ret = close(fd);
ICUNIT_ASSERT_NOT_EQUAL(ret, POSIX_FS_IS_ERROR, ret);
int32_t fd1 = open(tmpFileName, O_RDWR, TEST_MODE_NORMAL);
ICUNIT_ASSERT_NOT_EQUAL(fd, POSIX_FS_IS_ERROR, fd1);
int32_t fd2 = open(tmpFileName, O_RDWR, TEST_MODE_NORMAL);
ICUNIT_ASSERT_EQUAL(fd2, POSIX_FS_IS_ERROR, fd2);
ICUNIT_ASSERT_EQUAL(errno, EBUSY, POSIX_FS_IS_ERROR);
ret = close(fd1);
ICUNIT_ASSERT_NOT_EQUAL(ret, POSIX_FS_IS_ERROR, ret);
ret = unlink(tmpFileName);
ICUNIT_ASSERT_NOT_EQUAL(ret, POSIX_FS_IS_ERROR, ret);
return POSIX_FS_NO_ERROR;
}
/* *
* @tc.number SUB_KERNEL_FS_OPEN_008
* @tc.name open
* @tc.desc [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(PosixFsFuncTestSuite, testFsOpen008, Function | MediumTest | Level1)
{
int32_t ret;
const char tmpFileName[TEST_BUF_SIZE] = { FILE1 };
int32_t fd = open(tmpFileName, O_CREAT | O_RDWR, TEST_MODE_HIGH);
ICUNIT_ASSERT_NOT_EQUAL(fd, POSIX_FS_IS_ERROR, fd);
ret = close(fd);
ICUNIT_ASSERT_NOT_EQUAL(ret, POSIX_FS_IS_ERROR, ret);
int32_t fd1 = open(tmpFileName, O_RDONLY, TEST_MODE_NORMAL);
ICUNIT_ASSERT_NOT_EQUAL(fd1, POSIX_FS_IS_ERROR, fd1);
int32_t fd2 = open(tmpFileName, O_RDONLY, TEST_MODE_NORMAL);
ICUNIT_ASSERT_NOT_EQUAL(fd2, POSIX_FS_IS_ERROR, fd2);
ret = close(fd1);
ICUNIT_ASSERT_NOT_EQUAL(ret, POSIX_FS_IS_ERROR, ret);
ret = close(fd2);
ICUNIT_ASSERT_NOT_EQUAL(ret, POSIX_FS_IS_ERROR, ret);
fd1 = open(tmpFileName, O_RDWR, TEST_MODE_NORMAL);
ICUNIT_ASSERT_NOT_EQUAL(fd1, POSIX_FS_IS_ERROR, fd1);
fd2 = open(tmpFileName, O_RDWR, TEST_MODE_NORMAL);
ICUNIT_ASSERT_EQUAL(fd2, POSIX_FS_IS_ERROR, fd2);
int32_t fd3 = open(tmpFileName, O_RDWR, TEST_MODE_NORMAL);
ICUNIT_ASSERT_EQUAL(fd3, POSIX_FS_IS_ERROR, fd3);
ret = close(fd1);
ICUNIT_ASSERT_NOT_EQUAL(ret, POSIX_FS_IS_ERROR, ret);
ret = unlink(tmpFileName);
ICUNIT_ASSERT_NOT_EQUAL(ret, POSIX_FS_IS_ERROR, ret);
return POSIX_FS_NO_ERROR;
}
/* *
* @tc.number SUB_KERNEL_FS_CLOSE_001
* @tc.name close
* @tc.desc [C- SOFTWARE -0200]
*/
@@ -2045,6 +2163,11 @@ void PosixFsAPITest(void)
RUN_ONE_TESTCASE(testFsOpen003);
RUN_ONE_TESTCASE(testFsOpen004);
RUN_ONE_TESTCASE(testFsOpen005);
#if (LOSCFG_SUPPORT_FATFS == 1)
RUN_ONE_TESTCASE(testFsOpen006);
RUN_ONE_TESTCASE(testFsOpen007);
RUN_ONE_TESTCASE(testFsOpen008);
#endif
RUN_ONE_TESTCASE(testFsClose001);
RUN_ONE_TESTCASE(testFsWrite001);
RUN_ONE_TESTCASE(testFsWrite002);