[lvc-project] [PATCH] mm/damon: get rid of overlapping areas.

Fedor Pchelkin pchelkin at ispras.ru
Wed May 27 13:35:44 MSK 2026


Точка в названии не нужна.

On Mon, 25. May 15:45, Markov Gleb wrote:
> From: Gleb Markov <markov.gi at npc-ksb.ru>
> 
> Caused of sscanf() usage on the same memory allocated space
> may occur an overlapping areas situation with further UB fall.

Откуда взята информация про UB?  Просьба кратко пояснить в описании.

> 
> Add a temporary buffer to avoid overlapping.
> 
> Found by Linux Verification Center (linuxtesting.org) with SVACE.
> 
> Fixes: 4bc05954d007 ("mm/damon: implement a debugfs-based user space interface")
> Signed-off-by: Gleb Markov <markov.gi at npc-ksb.ru>
> ---

Патч неприменим к master-ветке ядра вследствие 5ec4333b1967 ("mm/damon:
remove DAMON debugfs interface"), соответственно он может быть принят
только нами в lvc-ветки, для апстрима не актуален.  Просьба указывать
целевые стабильные ветки в теме письма, например [PATCH 5.10/6.1/6.12].


>  mm/damon/dbgfs.c | 5 ++++-
>  1 file changed, 4 insertions(+), 1 deletion(-)
> 
> diff --git a/mm/damon/dbgfs.c b/mm/damon/dbgfs.c
> index b3f454a5c682..643c7c085c68 100644
> --- a/mm/damon/dbgfs.c
> +++ b/mm/damon/dbgfs.c
> @@ -1003,17 +1003,20 @@ static ssize_t dbgfs_monitor_on_write(struct file *file,
>  {
>  	ssize_t ret;
>  	char *kbuf;
> +	char tmp[64];
>  
>  	kbuf = user_input_str(buf, count, ppos);
>  	if (IS_ERR(kbuf))
>  		return PTR_ERR(kbuf);
>  
>  	/* Remove white space */
> -	if (sscanf(kbuf, "%s", kbuf) != 1) {
> +	if (sscanf(kbuf, "%63s", tmp) != 1) {

То есть по некой причине ограничиваете длину ввода 64 символами?  Почему
взята именно константа 64?  А вдруг нужно более длинный ввод обрабатывать?
Описание патча к сожалению не поясняет выбор константы.

Наверняка в ядре есть функции, позволяющие сделать нужную манипуляцию.
Какой-нибудь strstrip() или strtok() заиспользовать.  Лучше положиться на
библиотечные функции, так возможно будет более чистое решение.

>  		kfree(kbuf);
>  		return -EINVAL;
>  	}
>  
> +	strcpy(kbuf, tmp);
> +
>  	mutex_lock(&damon_dbgfs_lock);
>  	if (!strncmp(kbuf, "on", count)) {
>  		int i;
> -- 
> 2.43.0



More information about the lvc-project mailing list