mirror of
https://github.com/openzfs/zfs.git
synced 2025-10-02 04:33:38 +00:00

It appears that in earlier kernels the maximum name length of a kobject was KOBJ_NAME_LEN (20) bytes. This was later extended to dynamically allocate enough memory if it was over KOBJ_NAME_LEN, and finally it was always made dynamic. Unfortunately, util this last step happened it doesn't look like it always safe to use names larger than KOBJ_NAME_LEN. For example, under the RHEL5 2.6.18 kernel if the kobject name length exceeds KOBJ_NAME_LEN a NULL dereference is tripped. To avoid this issue the build system has been update to check to see if KOBJ_NAME_LEN is defined. If it is we have to assume the maximum kobject name length is only 20 bytes. This 20 byte name must minimally include the following components. <zpool>/<dataset>[@snapshot[partition]]
22 lines
563 B
Plaintext
22 lines
563 B
Plaintext
dnl #
|
|
dnl # 2.6.27 API change,
|
|
dnl # kobject KOBJ_NAME_LEN static limit removed. All users of this
|
|
dnl # constant were removed prior to 2.6.27, but to be on the safe
|
|
dnl # side this check ensures the constant is undefined.
|
|
dnl #
|
|
AC_DEFUN([ZFS_AC_KERNEL_KOBJ_NAME_LEN], [
|
|
AC_MSG_CHECKING([whether kernel defines KOBJ_NAME_LEN])
|
|
ZFS_LINUX_TRY_COMPILE([
|
|
#include <linux/kobject.h>
|
|
],[
|
|
int val;
|
|
val = KOBJ_NAME_LEN;
|
|
],[
|
|
AC_MSG_RESULT([yes])
|
|
AC_DEFINE(HAVE_KOBJ_NAME_LEN, 1,
|
|
[kernel defines KOBJ_NAME_LEN])
|
|
],[
|
|
AC_MSG_RESULT([no])
|
|
])
|
|
])
|