В ядре Linux устранена следующая уязвимость:
lockd: исправлено разыменование NULL при сбое выделения владельца блокировки.
nlmclnt_locks_init_private() устанавливает операции блокировки файлов NLM, даже если
nlmclnt_find_lockowner() не может выделить владельца блокировки. nlmclnt_proc()
затем возвращает -ENOMEM, но VFS все равно частично срывает
инициализирует file_lock и вызывает locks_release_private().
Это вызывает функцию nlmclnt_locks_release_private(), которая разыменовывает
fl->fl_u.nfs_fl.owner и происходит сбой, поскольку владелец никогда не был установлен.
Очистите fl_ops перед попыткой инициализировать частное состояние NLM и
устанавливайте операции блокировки NLM только после того, как был назначен владелец блокировки
успешно.
Показать оригинальное описание (EN)
In the Linux kernel, the following vulnerability has been resolved: lockd: fix NULL dereference on lockowner allocation failure nlmclnt_locks_init_private() installs NLM file lock operations even when nlmclnt_find_lockowner() fails to allocate a lockowner. nlmclnt_proc() then returns -ENOMEM, but the VFS still tears down the partially initialized file_lock and calls locks_release_private(). That invokes nlmclnt_locks_release_private(), which dereferences fl->fl_u.nfs_fl.owner and crashes because the owner was never installed. Clear fl_ops before attempting to initialize the NLM private state, and install the NLM lock operations only after a lockowner has been allocated successfully.