Documentation/bpf/fs_kfuncs.rst GitHub 원문 ↗

Linux 6.18.37 · BPF

BPF filesystem kfuncs

BPF LSM에서 filesystem xattr·fs-verity digest를 읽는 kfunc와 recursion 방지 규칙을 설명합니다.

Source pathDocumentation/bpf/fs_kfuncs.rst
Source versionLinux v6.18.37
TranslationDUJINLABS 전문 번역 + 해설

요약·해설, 영어 원문, 전체 번역을 구분해 실었습니다. API 이름, 코드 심벌, 소스 경로는 원문 표기를 유지합니다.

1. 요약·해설

원문의 핵심 내용을 정리하고 커널 프로그래밍에 필요한 설명을 덧붙였습니다. 아래의 전체 번역과는 별도로 작성한 해설입니다.

요약과 해설

fs_kfuncs.rst:1-21

`bpf_get_file_xattr()`와 `bpf_get_fsverity_digest()`는 BPF LSM hook이 filesystem metadata를 읽는 경로를 제공합니다.

이들은 BPF LSM function에서만 사용할 수 있으며 다른 `security_*()` LSM hook으로 재진입하지 않아야 합니다. 따라서 xattr 조회도 `security_inode_getxattr`를 호출하는 `vfs_getxattr()`를 우회합니다.

2. 영어 원문 전체

번역에 사용한 Linux v6.18.37 원문입니다. 줄 번호는 해당 버전의 소스 파일을 기준으로 합니다.

원문 전체 펼치기
1 .. SPDX-License-Identifier: GPL-2.0
2
3 .. _fs_kfuncs-header-label:
4
5 =====================
6 BPF filesystem kfuncs
7 =====================
8
9 BPF LSM programs need to access filesystem data from LSM hooks. The following
10 BPF kfuncs can be used to get these data.
11
12 * ``bpf_get_file_xattr()``
13
14 * ``bpf_get_fsverity_digest()``
15
16 To avoid recursions, these kfuncs follow the following rules:
17
18 1. These kfuncs are only permitted from BPF LSM function.
19 2. These kfuncs should not call into other LSM hooks, i.e. security_*(). For
20 example, ``bpf_get_file_xattr()`` does not use ``vfs_getxattr()``, because
21 the latter calls LSM hook ``security_inode_getxattr``.
22

3. 한국어 전문 번역

영어 원문의 문단 순서와 의미에 맞춰 전체 내용을 번역했습니다. 코드, 함수명, 코드 심벌, URL은 원문 표기를 유지합니다.

BPF filesystem kfuncs

1-8

이 문서는 `GPL-2.0` license를 따르며 `fs_kfuncs-header-label` anchor에서 BPF filesystem kfunc를 설명합니다.

BPF LSM의 filesystem data 접근

9-10

BPF LSM program은 LSM hook에서 filesystem data에 접근해야 합니다. 아래 BPF kfunc를 사용해 이 data를 가져올 수 있습니다.

제공되는 filesystem kfunc

11-15
  • `bpf_get_file_xattr()`
  • `bpf_get_fsverity_digest()`

Recursion 방지 규칙

16-21

recursion을 피하기 위해 이 kfunc는 다음 규칙을 따릅니다.

  • 이 kfunc는 BPF LSM function에서만 허용됩니다.
  • 이 kfunc는 다른 LSM hook, 즉 `security_*()`를 호출해서는 안 됩니다.

예를 들어 `bpf_get_file_xattr()`는 `vfs_getxattr()`를 사용하지 않습니다. 후자는 LSM hook `security_inode_getxattr`를 호출하기 때문입니다.