[lvc-project] [PATCH] fs/hfsplus: Use a more secure copy method.
Fedor Pchelkin
pchelkin at ispras.ru
Sun May 31 19:04:46 MSK 2026
On Mon, 25. May 15:44, Markov Gleb wrote:
> From: Gleb Markov <markov.gi at npc-ksb.ru>
>
> When copying, an additional byte is allocated for the null
> terminator and the buffer will definitely not be overflowed,
Зачем тогда что-либо менять? Целесообразно ли это делать, если код в
явном виде учитывает ограничения?
> however, replacing the outdated method with a safe one seems
> to be the correct action.
>
Тогда все предупреждения вида PROC_USE.VULNERABLE нужно разметить как
Confirmed и готвоить на всё патчи. Но что-то этого никто не делает...
> Fixes: 5e61473ea9f1 ("fs/hfsplus: move xattr_name allocation in hfsplus_setxattr()")
> Fixes: a3cef4cd6886 ("fs/hfsplus: move xattr_name allocation in hfsplus_getxattr()")
Если ошибки нет, Fixes не нужны.
> @@ -425,12 +425,14 @@ int hfsplus_setxattr(struct inode *inode, const char *name,
> char *xattr_name;
> int res;
> + size_t total_size;
>
> - xattr_name = kmalloc(NLS_MAX_CHARSET_SIZE * HFSPLUS_ATTR_MAX_STRLEN + 1,
> - GFP_KERNEL);
> + total_size = NLS_MAX_CHARSET_SIZE * HFSPLUS_ATTR_MAX_STRLEN + 1;
> + xattr_name = kmalloc(total_size, GFP_KERNEL);
> +
> if (!xattr_name)
> return -ENOMEM;
> - strcpy(xattr_name, prefix);
> - strcpy(xattr_name + prefixlen, name);
Касаемо изначального предположения о невозможности переполнения, уверены,
что длины передаваемых сюда строк prefix и name суммарно ограничены
NLS_MAX_CHARSET_SIZE * HFSPLUS_ATTR_MAX_STRLEN ? Это стоит отследить по
коду и обосновать, хотя бы кратко. То что там в конце +1 добавляется,
это хорошо и видимо действительно для нуль-терминатора, но это особо не
играет роли если вдруг по какой-то причине длины строк превышают
заданное ограничение в NLS_MAX_CHARSET_SIZE * HFSPLUS_ATTR_MAX_STRLEN.
> + strscpy(xattr_name, prefix, total_size);
> + strscpy(xattr_name + prefixlen, name, total_size - prefixlen);
> res = __hfsplus_setxattr(inode, xattr_name, value, size, flags);
> kfree(xattr_name);
> return res;
More information about the lvc-project
mailing list