From nobody@FreeBSD.org  Mon Aug  1 14:40:27 2011
Return-Path: <nobody@FreeBSD.org>
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id BB5FC1065672
	for <freebsd-gnats-submit@FreeBSD.org>; Mon,  1 Aug 2011 14:40:27 +0000 (UTC)
	(envelope-from nobody@FreeBSD.org)
Received: from red.freebsd.org (red.freebsd.org [IPv6:2001:4f8:fff6::22])
	by mx1.freebsd.org (Postfix) with ESMTP id 92D478FC1C
	for <freebsd-gnats-submit@FreeBSD.org>; Mon,  1 Aug 2011 14:40:27 +0000 (UTC)
Received: from red.freebsd.org (localhost [127.0.0.1])
	by red.freebsd.org (8.14.4/8.14.4) with ESMTP id p71EeRuq003889
	for <freebsd-gnats-submit@FreeBSD.org>; Mon, 1 Aug 2011 14:40:27 GMT
	(envelope-from nobody@red.freebsd.org)
Received: (from nobody@localhost)
	by red.freebsd.org (8.14.4/8.14.4/Submit) id p71EeRjW003879;
	Mon, 1 Aug 2011 14:40:27 GMT
	(envelope-from nobody)
Message-Id: <201108011440.p71EeRjW003879@red.freebsd.org>
Date: Mon, 1 Aug 2011 14:40:27 GMT
From: Robert Millan <rmh@debian.org>
To: freebsd-gnats-submit@FreeBSD.org
Subject: ZFS MAXNAMELEN macro has confusing name (off-by-one)
X-Send-Pr-Version: www-3.1
X-GNATS-Notify:

>Number:         159357
>Category:       kern
>Synopsis:       [zfs] ZFS MAXNAMELEN macro has confusing name (off-by-one)
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-fs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Mon Aug 01 14:50:10 UTC 2011
>Closed-Date:    
>Last-Modified:  Fri Aug 05 01:33:57 UTC 2011
>Originator:     Robert Millan
>Release:        FreeBSD 8.2
>Organization:
>Environment:
>Description:

It's not clear what MAXNAMELEN in ZFS compat environment means. Name indicates it's the maximum name length (for ZFS objects), but actual checks error out when requested name has the maximum length. In practice this makes it the maximum plus one:

./sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dataset.c: if (dsl_dataset_namelen(ds) + 1 + strlen(snapname) >= MAXNAMELEN)
./sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dataset.c: if (dsl_dir_namelen(ds->ds_dir) + 1 + strlen(newsnapname) >= MAXNAMELEN)
./sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dataset.c: if (strlen(oldname) + delta >= MAXNAMELEN)
./sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c:   if (strlcat(zc->zc_name, "@", sizeof (zc->zc_name)) >= MAXNAMELEN) {
./sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c:           if (strlen(propname) >= ZAP_MAXNAMELEN)
./sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_prop.c:    if (strlen(propname) >= ZAP_MAXNAMELEN)
./sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_prop.c:            if (strlen(nvpair_name(elem)) >= ZAP_MAXNAMELEN)
./sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dir.c:             if (strlen(path) >= MAXNAMELEN)
./sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dir.c:             if (p-path >= MAXNAMELEN)
./sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dir.c:             if (p-path >= MAXNAMELEN)
./sys/cddl/contrib/opensolaris/common/zfs/zfs_namecheck.c:      if (strlen(path) >= MAXNAMELEN) {
./sys/cddl/contrib/opensolaris/common/zfs/zfs_namecheck.c:      if (strlen(path) >= MAXNAMELEN) {
./sys/cddl/contrib/opensolaris/common/zfs/zfs_namecheck.c:              if (end - start >= MAXNAMELEN) {
./sys/cddl/contrib/opensolaris/common/zfs/zfs_namecheck.c:      if (strlen(pool) >= MAXNAMELEN) {
./cddl/contrib/opensolaris/lib/libzfs/common/libzfs_pool.c:     } else if (p - volname >= ZFS_MAXNAMELEN) {
./cddl/contrib/opensolaris/lib/libzfs/common/libzfs_dataset.c:                  if (strlen(nvpair_name(elem)) >= ZAP_MAXNAMELEN) {

>How-To-Repeat:

>Fix:


>Release-Note:
>Audit-Trail:
Responsible-Changed-From-To: freebsd-bugs->freebsd-fs 
Responsible-Changed-By: linimon 
Responsible-Changed-When: Fri Aug 5 01:33:39 UTC 2011 
Responsible-Changed-Why:  
reclassify. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=159357 
>Unformatted:
