Commit 54c2a45
authored
fix(fs): 修复 sys_rename 逻辑并支持 RENAME_NOREPLACE (#1393)
逻辑修复:
· 修正覆盖现有文件/目录时的逻辑,确保目标被正确截断和删除。
· 增加文件类型检查,禁止文件与目录之间的非法覆盖。
· 增加祖先关系检查,防止将目录移动到其子目录下。
· 修复同名重命名及非空目录覆盖的边界情况。
· 拦截源或目标路径以 . 或 .. 结尾的非法操作。
功能增强:
引入RenameFlags支持,实现了 RENAME_NOREPLACE 语义。
相关 Commits:
· 添加 RenameFlags 支持 (NOREPLACE)
· 完善路径拦截 (. / ..)
·修复覆盖
截断及类型检查逻辑
· 增加祖先关系判断
---------
Signed-off-by: kaleidoscope416 <[email protected]>1 parent 1e6ccec commit 54c2a45
File tree
12 files changed
+214
-66
lines changed- kernel/src/filesystem
- fat
- kernfs
- procfs
- ramfs
- vfs
- syscall
- user/apps/tests/syscall/gvisor
- blocklists
12 files changed
+214
-66
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | | - | |
3 | | - | |
4 | | - | |
5 | | - | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
6 | 5 | | |
7 | 6 | | |
8 | 7 | | |
| |||
12 | 11 | | |
13 | 12 | | |
14 | 13 | | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
15 | 17 | | |
16 | 18 | | |
17 | 19 | | |
| |||
789 | 791 | | |
790 | 792 | | |
791 | 793 | | |
792 | | - | |
| 794 | + | |
| 795 | + | |
793 | 796 | | |
794 | 797 | | |
795 | 798 | | |
| |||
852 | 855 | | |
853 | 856 | | |
854 | 857 | | |
| 858 | + | |
855 | 859 | | |
856 | 860 | | |
857 | 861 | | |
| |||
862 | 866 | | |
863 | 867 | | |
864 | 868 | | |
865 | | - | |
866 | 869 | | |
867 | 870 | | |
868 | | - | |
869 | | - | |
870 | | - | |
871 | | - | |
| 871 | + | |
872 | 872 | | |
873 | | - | |
| 873 | + | |
| 874 | + | |
| 875 | + | |
| 876 | + | |
| 877 | + | |
| 878 | + | |
| 879 | + | |
| 880 | + | |
| 881 | + | |
874 | 882 | | |
875 | 883 | | |
876 | 884 | | |
877 | 885 | | |
878 | | - | |
879 | 886 | | |
880 | 887 | | |
881 | | - | |
882 | 888 | | |
883 | | - | |
884 | 889 | | |
885 | 890 | | |
886 | 891 | | |
| |||
889 | 894 | | |
890 | 895 | | |
891 | 896 | | |
892 | | - | |
893 | 897 | | |
894 | 898 | | |
895 | 899 | | |
| |||
905 | 909 | | |
906 | 910 | | |
907 | 911 | | |
| 912 | + | |
908 | 913 | | |
909 | 914 | | |
910 | 915 | | |
| |||
916 | 921 | | |
917 | 922 | | |
918 | 923 | | |
919 | | - | |
920 | | - | |
921 | | - | |
922 | | - | |
923 | | - | |
924 | | - | |
925 | | - | |
| 924 | + | |
| 925 | + | |
| 926 | + | |
| 927 | + | |
| 928 | + | |
| 929 | + | |
| 930 | + | |
| 931 | + | |
| 932 | + | |
| 933 | + | |
| 934 | + | |
| 935 | + | |
| 936 | + | |
926 | 937 | | |
927 | 938 | | |
928 | 939 | | |
929 | 940 | | |
930 | | - | |
931 | 941 | | |
932 | | - | |
933 | 942 | | |
934 | 943 | | |
935 | 944 | | |
| |||
1025 | 1034 | | |
1026 | 1035 | | |
1027 | 1036 | | |
1028 | | - | |
1029 | 1037 | | |
1030 | 1038 | | |
1031 | 1039 | | |
| |||
2464 | 2472 | | |
2465 | 2473 | | |
2466 | 2474 | | |
| 2475 | + | |
| 2476 | + | |
| 2477 | + | |
| 2478 | + | |
| 2479 | + | |
| 2480 | + | |
| 2481 | + | |
| 2482 | + | |
| 2483 | + | |
| 2484 | + | |
| 2485 | + | |
| 2486 | + | |
| 2487 | + | |
| 2488 | + | |
| 2489 | + | |
| 2490 | + | |
| 2491 | + | |
| 2492 | + | |
| 2493 | + | |
| 2494 | + | |
| 2495 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
1 | 2 | | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
2 | 8 | | |
3 | 9 | | |
4 | 10 | | |
5 | 11 | | |
6 | 12 | | |
7 | 13 | | |
8 | 14 | | |
9 | | - | |
10 | | - | |
11 | | - | |
12 | | - | |
13 | | - | |
14 | | - | |
15 | 15 | | |
16 | 16 | | |
17 | 17 | | |
| |||
265 | 265 | | |
266 | 266 | | |
267 | 267 | | |
| 268 | + | |
268 | 269 | | |
| 270 | + | |
| 271 | + | |
| 272 | + | |
269 | 273 | | |
270 | 274 | | |
| 275 | + | |
| 276 | + | |
| 277 | + | |
| 278 | + | |
| 279 | + | |
| 280 | + | |
| 281 | + | |
| 282 | + | |
| 283 | + | |
| 284 | + | |
| 285 | + | |
| 286 | + | |
| 287 | + | |
271 | 288 | | |
272 | | - | |
| 289 | + | |
273 | 290 | | |
274 | | - | |
275 | 291 | | |
276 | 292 | | |
277 | 293 | | |
| |||
282 | 298 | | |
283 | 299 | | |
284 | 300 | | |
285 | | - | |
286 | 301 | | |
287 | | - | |
288 | | - | |
| 302 | + | |
289 | 303 | | |
290 | 304 | | |
291 | 305 | | |
| |||
299 | 313 | | |
300 | 314 | | |
301 | 315 | | |
| 316 | + | |
302 | 317 | | |
303 | 318 | | |
304 | 319 | | |
305 | 320 | | |
306 | 321 | | |
307 | 322 | | |
308 | | - | |
| 323 | + | |
309 | 324 | | |
| 325 | + | |
| 326 | + | |
| 327 | + | |
| 328 | + | |
| 329 | + | |
| 330 | + | |
| 331 | + | |
| 332 | + | |
| 333 | + | |
| 334 | + | |
| 335 | + | |
| 336 | + | |
| 337 | + | |
| 338 | + | |
310 | 339 | | |
311 | | - | |
| 340 | + | |
| 341 | + | |
312 | 342 | | |
313 | | - | |
314 | 343 | | |
315 | 344 | | |
316 | 345 | | |
| |||
331 | 360 | | |
332 | 361 | | |
333 | 362 | | |
334 | | - | |
335 | | - | |
336 | | - | |
337 | | - | |
338 | | - | |
339 | 363 | | |
| 364 | + | |
| 365 | + | |
| 366 | + | |
| 367 | + | |
| 368 | + | |
| 369 | + | |
| 370 | + | |
| 371 | + | |
| 372 | + | |
| 373 | + | |
340 | 374 | | |
341 | 375 | | |
342 | 376 | | |
| |||
1900 | 1934 | | |
1901 | 1935 | | |
1902 | 1936 | | |
| 1937 | + | |
1903 | 1938 | | |
1904 | 1939 | | |
1905 | 1940 | | |
1906 | 1941 | | |
1907 | 1942 | | |
1908 | | - | |
| 1943 | + | |
1909 | 1944 | | |
1910 | | - | |
| 1945 | + | |
1911 | 1946 | | |
1912 | 1947 | | |
1913 | 1948 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
12 | 12 | | |
13 | 13 | | |
14 | 14 | | |
| 15 | + | |
15 | 16 | | |
16 | 17 | | |
17 | 18 | | |
| |||
227 | 228 | | |
228 | 229 | | |
229 | 230 | | |
| 231 | + | |
230 | 232 | | |
231 | 233 | | |
232 | 234 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
16 | 16 | | |
17 | 17 | | |
18 | 18 | | |
| 19 | + | |
19 | 20 | | |
20 | 21 | | |
21 | 22 | | |
| |||
1078 | 1079 | | |
1079 | 1080 | | |
1080 | 1081 | | |
| 1082 | + | |
1081 | 1083 | | |
1082 | 1084 | | |
1083 | 1085 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | 3 | | |
| 4 | + | |
4 | 5 | | |
5 | 6 | | |
6 | 7 | | |
| |||
440 | 441 | | |
441 | 442 | | |
442 | 443 | | |
| 444 | + | |
443 | 445 | | |
444 | 446 | | |
445 | 447 | | |
| |||
455 | 457 | | |
456 | 458 | | |
457 | 459 | | |
| 460 | + | |
| 461 | + | |
| 462 | + | |
| 463 | + | |
458 | 464 | | |
459 | 465 | | |
460 | 466 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
20 | 20 | | |
21 | 21 | | |
22 | 22 | | |
23 | | - | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
24 | 27 | | |
25 | 28 | | |
26 | 29 | | |
| |||
407 | 410 | | |
408 | 411 | | |
409 | 412 | | |
| 413 | + | |
410 | 414 | | |
411 | 415 | | |
412 | 416 | | |
| |||
0 commit comments