Skip to content

Commit a2c86aa

Browse files
sinkapAlexei Starovoitov
authored andcommitted
bpf: Require frozen map for calculating map hash
Currently, bpf_map_get_info_by_fd calculates and caches the hash of the map regardless of the map's frozen state. This leads to a TOCTOU bug where userspace can call BPF_OBJ_GET_INFO_BY_FD to cache the hash and then modify the map contents before freezing. Therefore, a trusted loader can be tricked into verifying the stale hash while loading the modified contents. Fix this by returning -EPERM if the map is not frozen when the hash is requested. This ensures the hash is only generated for the final, immutable state of the map. Fixes: ea2e646 ("bpf: Return hashes of maps in BPF_OBJ_GET_INFO_BY_FD") Reported-by: Toshi Piazza <toshi.piazza@microsoft.com> Signed-off-by: KP Singh <kpsingh@kernel.org> Acked-by: Daniel Borkmann <daniel@iogearbox.net> Link: https://lore.kernel.org/r/20260205070755.695776-1-kpsingh@kernel.org Signed-off-by: Alexei Starovoitov <ast@kernel.org>
1 parent ea1535e commit a2c86aa

1 file changed

Lines changed: 3 additions & 0 deletions

File tree

kernel/bpf/syscall.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5328,6 +5328,9 @@ static int bpf_map_get_info_by_fd(struct file *file,
53285328
if (info.hash_size != SHA256_DIGEST_SIZE)
53295329
return -EINVAL;
53305330

5331+
if (!READ_ONCE(map->frozen))
5332+
return -EPERM;
5333+
53315334
err = map->ops->map_get_hash(map, SHA256_DIGEST_SIZE, map->sha);
53325335
if (err != 0)
53335336
return err;

0 commit comments

Comments
 (0)