[lvc-project] [PATCH] net: fix potential use-after-free in ch_ipsec_xfrm_add_state() callback
Fedor Pchelkin
pchelkin at ispras.ru
Wed Oct 1 14:34:57 MSK 2025
Добрый день!
На всякий случай, сообщу, что есть опция отправлять патчи в
lvc-patches at linuxtesting.org для предв. ревью перед отправкой в межд.
сообщество. Там стараемся ловить некоторые стандартные моменты в
оформлении патчей, ну и лишний раз проблему от Свейса обсудить бывает
полезным.
Для патча в этот драйвер можно использовать префикс "ch_ipsec:" или
"cxgb4/ch_ipsec:". "net" слишком общий.
У сетевой подсистемы есть ряд своих правил в оформлении :)
https://www.kernel.org/doc/html/latest/process/maintainer-netdev.html#netdev-faq
Для фикс-патчей целевое дерево net следует указывать в теме письма.
Например:
[PATCH net] cxgb4/ch_ipsec: handle try_module_get() return value
On Wed, 01. Oct 14:16, Pavel Zhigulin wrote:
> In ch_ipsec_xfrm_add_state() there is not check of try_module_get
> return value. It is very unlikely, but try_module_get() could return
> false value, which could cause use-after-free error.
Не сказал бы, что описание даёт понять, при каких хотя бы теоретических
обстоятельствах функция может вернуть ошибку в данном случае. У
мэйнтейнеров такой вопрос тоже может возникнуть.
>
> This fix adds checking the result of try_module_get call
Describe your changes in imperative mood, e.g. “make xyzzy do frotz”
instead of “[This patch] makes xyzzy do frotz” or “[I] changed xyzzy to
do frotz”, as if you are giving orders to the codebase to change its
behaviour.
https://www.kernel.org/doc/html/latest/process/submitting-patches.html#describe-your-changes
> +#include "asm-generic/errno-base.h"
> +#include "linux/compiler.h"
Зачем?
В этом модуле уже во многих местах возвращаются стандартные коды ошибок,
да и likely/unlikely тоже есть.
В общем случае likely/unlikely лучше использовать, когда имеются
результаты тестов-бенчмарков того, что их использование действительно
несёт пользу. В ином случае это не несёт какой-либо явной пользы и
наоборот может ненароком даже сбить с толку компилятор. Современные
компиляторы и CPU достаточно хорошо оптимизируют код без необоснованных
подсказок.
Впрочем, это на усмотрение Вас как автора патча и сопровождающих
подсистемы.
> #define pr_fmt(fmt) "ch_ipsec: " fmt
>
> #include <linux/kernel.h>
> @@ -301,7 +303,8 @@ static int ch_ipsec_xfrm_add_state(struct net_device *dev,
> sa_entry->esn = 1;
> ch_ipsec_setkey(x, sa_entry);
> x->xso.offload_handle = (unsigned long)sa_entry;
> - try_module_get(THIS_MODULE);
> + if (unlikely(!try_module_get(THIS_MODULE)))
> + res = -ENODEV;
> out:
> return res;
> }
> --
> 2.43.0
More information about the lvc-project
mailing list