แแแ แแ แ แแแแขแแ แจแแแแแแแแแแแ OpenBSD-แจแ แแฎแแแ แแแฅแแแแแแแก แแแขแแแ แแ แแแ แจแแขแแแแก แแแแแแแ แแก แจแแกแแแชแแ แแแแแ, แ แแช openat แกแแกแขแแแฃแ แ แแแแแซแแฎแแแแก แแแคแแ แแแแแแ แแแแฎแแ แชแแแแแ. แแแ แแแแกแแแแก, libc-แกแแแแก แแ แกแแแแแแกแ แกแแกแขแแแแก แแแแแแ แแ แแแแแแแชแแแกแแแแก แแแแแแแแ แแแขแฉแแแ, แ แแแแแแแช แแแ แแแแแ openat-แแกแ แแ open-แแก แแแแแขแแแแ แคแแแแแแก, แ แแแแแแแช แแฆแฃแแแแแ แแแแ แแแ แแฅแขแแ แแแแจแ "/."-แแก แกแแจแฃแแแแแแ แแแแแแแชแแแก แแ แแแกแแแฃแขแฃแ แ แแแแแแแแแก แฌแแแแแแก แจแแกแแซแแแแแแแแก. แชแแแแแแแแแ แฏแแ แแ แแ แแก แแแขแแแ แแ แแแฃแแ OpenBSD-current-แจแ แแ แแแแแแแ แแแแแแแแแ แแแก แจแแ แแก แแแแฎแแแแแก แแ แแชแแกแจแแ.
แกแแกแขแแแฃแ แ แแแแแซแแฎแแแแแแก openat(2) แแฏแแฎแ แแฅแชแแแ open(2)-แแก แแกแแแแกแแ, แแแ แแ แแแแกแ, แ แแ แแฃ "path" แแแ แแแแขแ แ แคแแ แแแแแแแ, แแแกแแฎแกแแแแ แคแแแแ แคแแ แแแแแแแ แคแแแแแก แแฆแแฌแแ แแแ "fd" แแกแแชแแ แแแฃแ แแแ แแฅแขแแ แแแกแแแ แแ แแ แ แแแแแแแแ แ แกแแแฃแจแแ แแแ แแฅแขแแ แแแกแแแ. แแฃ openat-แแก แแแกแแแฃแขแฃแ แแแแก แแแแแกแชแแแ, แแแแแแแแแ: int dirfd = open("/tmp", O_RDONLY | O_DIRECTORY); int hfd = openat(dirfd, "/etc/hosts", O_RDONLY);
openat() แคแฃแแฅแชแแ แฃแแฃแแแแแแงแแคแก โdirfdโ-แก แแ แจแแแแแแ, แแแกแแแฃแขแฃแ แ แแแ แแแ แแแแฃแ แแ แแแแฃแจแแแแแแ.
แแแแขแแ, open()-แแก openat()-แแ แฉแแแแชแแแแแ แแแแแกแแแแแ แแ แแฃแแฏแแแแกแแแก แแ แแแ แแแแก แฃแกแแคแ แแฎแแแแแก. แแ แแแแแซแแฎแแแแ แจแแแซแแแแ แแแแฉแฅแแ แแก แแแแก แแแแแแแ, แแแแ แแ แแ แจแแแฆแฃแแแก แคแแแแฃแ แกแแกแขแแแแแ แฌแแแแแ. แแแกแแแฃแขแฃแ แ แแแแก แแแ แซแแแแแก แแ แแจแแแ (แแแแแแแแแ, RESOLVE_BENEATH แแ/แแ RESOLVE_IN_ROOT openat2-แแกแแแแก) Linux): แแ แแแ แแแแกแขแแ แแกแแแ แงแแแแ แจแแกแแแแแแก แแแ แก แฃแแแ แแแแแแขแแก แแ แแ แแชแแกแแก แแแแขแ แแแแก แแฆแแแแกแแก, แแแแแแแกแฎแแแแก แจแแฃแซแแแ แคแแแแแแแก แแแกแแฎแกแแแแแ แกแฎแแ แแแแแ แแแแแแงแแแแก.
openrsync แแ แแแ แแแแแ แแฃแจแแแแแกแแก, แแแแก แคแแแแฃแ แ แกแแกแขแแแแก แแแแแแแแแแแแแก แจแแกแแซแแแแแแแแแแก แจแแแฆแฃแแแ แแแกแญแแ แแ, แแฃแแชแ แแก แจแแฃแซแแแแแแ แแงแ unveil() แแ pledge() แคแฃแแฅแชแแแแแก แแแแแงแแแแแแ. แจแแแแแ แแแ openat()-แแก แแกแแแแกแ แแแฅแแแแแแ แแแแคแแฅแ แ, แแแแ แแ แฃแกแแคแ แแฎแแแแแก แแกแแแ แคแฃแแฅแชแแแแแ, แ แแแแแแแช pledge/unveil-แก แจแแแแกแแแแ แแ แแฃแแแแช แแแ แแ แแ แกแแแแแแก แจแแแแฎแแแแแจแ แแแฃแจแแแแแแ.
แซแแ แแแแแ แแแแแ, แจแแแฆแฃแแแแแ แแแแแ แแแ แแฅแขแแ แแแก แแฆแแฌแแ แแก แแแฌแแแแ แแฅแชแแแ. แแแแก แแแกแแฆแฌแแแแ, แฉแแแ แแแแแแแแแ F_BELOW แคแแแแก, แ แแแแแก แแแงแแแแแแช แจแแกแแซแแแแแแแ fcntl()-แแก แกแแจแฃแแแแแแ, แแ O_BELOW แคแแแแก open()-แแกแแแแก. แแ แแแแ แจแแแฆแฃแแฃแแ "dirfd" แแฆแแฌแแ แ แแแ แแฅแขแแ แแแก แฎแแจแ แแฎแแแแ แฅแแแแแ แแแแแแแแแแแแแก แแแฃแจแแแแก: openat()-แแก แแแแแซแแฎแแแแแ แแแกแแแฃแขแฃแ แ แแแแ แแ แแแแแ แแแแแแแแแแแแ ".."-แแก แกแแจแฃแแแแแแ แแแ แจแแกแ แฃแแแแแ ENOENT แจแแชแแแแแ. แแแแแก แจแแกแ แฃแแแแแก แจแแขแแแแก แจแแแแฎแแแแแจแ, แแ แแชแแกแแก แคแแแแแก แแฆแแฌแแ แแก แชแฎแ แแแ แจแแแชแแแก แแแแแแแแ แคแฃแแฅแชแแแแแแฃแ "dirfd"-แแแก, แ แแช แแฆแฃแแแแก แจแแขแแแแก แแแแแแแ แก.
แฌแงแแ แ: opennet.ru
