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:
Brian Behlendorf 2010-08-09 14:48:12 -07:00
parent d5168aa089
commit dfc166d174
2 changed files with 22 additions and 0 deletions

View File

@ -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])
])
])

View File

@ -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