Limit sysfs name to KOBJ_NAME_LEN
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]]
This commit is contained in:
parent
d5168aa089
commit
dfc166d174
|
@ -0,0 +1,21 @@
|
|||
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])
|
||||
])
|
||||
])
|
|
@ -7,6 +7,7 @@ AC_DEFUN([ZFS_AC_CONFIG_KERNEL], [
|
|||
ZFS_AC_KERNEL_CONFIG
|
||||
ZFS_AC_KERNEL_BDEV_BLOCK_DEVICE_OPERATIONS
|
||||
ZFS_AC_KERNEL_TYPE_FMODE_T
|
||||
ZFS_AC_KERNEL_KOBJ_NAME_LEN
|
||||
ZFS_AC_KERNEL_OPEN_BDEV_EXCLUSIVE
|
||||
ZFS_AC_KERNEL_INVALIDATE_BDEV_ARGS
|
||||
ZFS_AC_KERNEL_BDEV_LOGICAL_BLOCK_SIZE
|
||||
|
|
Loading…
Reference in New Issue