From: Daniel Borkmann Date: Fri, 26 May 2023 10:13:56 +0000 (+0200) Subject: bpf: Fix bad unlock balance on freeze_mutex X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=4266f41feaeee2521749ce2cfb52eafd4e2947c5;p=linux.git bpf: Fix bad unlock balance on freeze_mutex Commit c4c84f6fb2c4 ("bpf: drop unnecessary bpf_capable() check in BPF_MAP_FREEZE command") moved the permissions check outside of the freeze_mutex in the map_freeze() handler. The error paths still jumps to the err_put which tries to unlock the freeze_mutex even though it was not locked in the first place. Fix it. Fixes: c4c84f6fb2c4 ("bpf: drop unnecessary bpf_capable() check in BPF_MAP_FREEZE command") Reported-by: syzbot+8982e75c2878b9ffeac5@syzkaller.appspotmail.com Signed-off-by: Daniel Borkmann --- diff --git a/kernel/bpf/syscall.c b/kernel/bpf/syscall.c index c9a201e4c4572..92a57efc77de8 100644 --- a/kernel/bpf/syscall.c +++ b/kernel/bpf/syscall.c @@ -1932,8 +1932,8 @@ static int map_freeze(const union bpf_attr *attr) } if (!(map_get_sys_perms(map, f) & FMODE_CAN_WRITE)) { - err = -EPERM; - goto err_put; + fdput(f); + return -EPERM; } mutex_lock(&map->freeze_mutex);