[lvc-project] [PATCH 5.10] page_pool: Fix use-after-free in page_pool_recycle_in_ring

Fedor Pchelkin pchelkin at ispras.ru
Fri Jun 5 19:28:08 MSK 2026


On Fri, 05. Jun 18:56, Viktoriya Danchenko wrote:
> [ Upstream commit 271683bb2cf32e5126c592b5d5e6a756fa374fd9 ]

Ещё нужен From автора ориг. коммита перед этим.

> [ Viktoriya: add patch hunk related to newer functionality,
>   namely added by:
> - 368d3cb406cd ("page_pool: fix inconsistency for page_pool_ring_[un]lock()")]

Его лучше портировать отдельным патчем.

> @@ -21,6 +21,29 @@
>  #define DEFER_TIME (msecs_to_jiffies(1000))
>  #define DEFER_WARN_INTERVAL (60 * HZ)
>  
> +static bool page_pool_producer_lock(struct page_pool *pool)
> +	__acquires(&pool->ring.producer_lock)
> +{
> +	bool in_softirq = in_softirq();

...

> @@ -320,14 +343,13 @@ static void page_pool_return_page(struct page_pool *pool, struct page *page)
>  
>  static bool page_pool_recycle_in_ring(struct page_pool *pool, struct page *page)
>  {
> -	int ret;
> +	bool in_softirq, ret;
>  	/* BH protection not needed if current is serving softirq */
> -	if (in_serving_softirq())

В 5.10 был in_serving_softirq(), патч заменяет на использование
in_softirq().  Они несколько отличаются.

Апстримный патч заменяет in_softirq() на in_softirq(), т.е. эта функция
уже вызывалась там изначально в силу каких-то изменений, случившихся после
5.10.

Этол требует какого-то обоснования.



More information about the lvc-project mailing list