kern/181127: [PATCH] set{domain, host}name doesn't permit NUL terminated strings that are MAXHOSTNAMELEN long

Garrett Cooper yaneurabeya at gmail.com
Thu Aug 8 02:20:01 UTC 2013


>Number:         181127
>Category:       kern
>Synopsis:       [PATCH] set{domain,host}name doesn't permit NUL terminated strings that are MAXHOSTNAMELEN long
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Thu Aug 08 02:20:00 UTC 2013
>Closed-Date:
>Last-Modified:
>Originator:     Garrett Cooper
>Release:        10-CURRENT
>Organization:
EMC Isilon
>Environment:
FreeBSD gran-tourismo.west.isilon.com 10.0-CURRENT FreeBSD 10.0-CURRENT #8 bc57ffb: Fri Aug  2 15:14:32 PDT 2013     root@:/usr/obj/usr/src/sys/GRAN-TOURISMO  amd64
>Description:
The noted link/patch fixes POSIX and generic requirement compliance for set{domain,host}name per the manpages by accounting for the fact that the string
must be NUL terminated.

Found with the NetBSD t_set{domain,host}name testcases:

Before:

$ pwd
/usr/tests/lib/libc/gen
$ sudo atf-run t_setdomainname | atf-report
t_setdomainname (1/1): 3 test cases
    setdomainname_basic: [0.019497s] Failed: /usr/src/lib/libc/tests/gen/t_setdomainname.c:66: setdomainname(domains[i],sizeof(domains[i])) == 0 not met
    setdomainname_limit: [0.004173s] Passed.
    setdomainname_perm: [0.005297s] Passed.
[0.029872s]

Failed test cases:
    t_setdomainname:setdomainname_basic

Summary for 1 test programs:
    2 passed test cases.
    1 failed test cases.
    0 expected failed test cases.
    0 skipped test cases.

After:

# atf-run t_setdomainname t_sethostname | atf-report t_setdomainname (1/2): 3 test cases
    setdomainname_basic: [0.004606s] Passed.
    setdomainname_limit: [0.004276s] Passed.
    setdomainname_perm: [0.004848s] Passed.
[0.014680s]

t_sethostname (2/2): 3 test cases
    sethostname_basic: [0.003908s] Passed.
    sethostname_limit: [0.004842s] Passed.
    sethostname_perm: [0.004738s] Passed.
[0.014337s]

Summary for 2 test programs:
    6 passed test cases.
    0 failed test cases.
    0 expected failed test cases.
    0 skipped test cases.
>How-To-Repeat:

>Fix:


Patch attached with submission follows:

>From 1b8333ca810b682d8ef049887a3b6cc9abd80807 Mon Sep 17 00:00:00 2001
From: Garrett Cooper <yanegomi at gmail.com>
Date: Wed, 7 Aug 2013 18:59:44 -0700
Subject: [PATCH] Permit setting hostnames that are MAX_HOSTNAMELEN long and
 are NUL terminated

Sponsored-by: EMC Isilon
---
 sys/kern/kern_mib.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/sys/kern/kern_mib.c b/sys/kern/kern_mib.c
index c84d4b2..384c14d 100644
--- a/sys/kern/kern_mib.c
+++ b/sys/kern/kern_mib.c
@@ -266,7 +266,7 @@ sysctl_hostname(SYSCTL_HANDLER_ARGS)
 {
 	struct prison *pr, *cpr;
 	size_t pr_offset;
-	char tmpname[MAXHOSTNAMELEN];
+	char tmpname[MAXHOSTNAMELEN+1];
 	int descend, error, len;
 
 	/*
@@ -314,11 +314,11 @@ sysctl_hostname(SYSCTL_HANDLER_ARGS)
 
 SYSCTL_PROC(_kern, KERN_HOSTNAME, hostname,
     CTLTYPE_STRING | CTLFLAG_RW | CTLFLAG_PRISON | CTLFLAG_MPSAFE,
-    (void *)(offsetof(struct prison, pr_hostname)), MAXHOSTNAMELEN,
+    (void *)(offsetof(struct prison, pr_hostname)), MAXHOSTNAMELEN+1,
     sysctl_hostname, "A", "Hostname");
 SYSCTL_PROC(_kern, KERN_NISDOMAINNAME, domainname,
     CTLTYPE_STRING | CTLFLAG_RW | CTLFLAG_PRISON | CTLFLAG_MPSAFE,
-    (void *)(offsetof(struct prison, pr_domainname)), MAXHOSTNAMELEN,
+    (void *)(offsetof(struct prison, pr_domainname)), MAXHOSTNAMELEN+1,
     sysctl_hostname, "A", "Name of the current YP/NIS domain");
 SYSCTL_PROC(_kern, KERN_HOSTUUID, hostuuid,
     CTLTYPE_STRING | CTLFLAG_RW | CTLFLAG_PRISON | CTLFLAG_MPSAFE,
-- 
1.8.3.4



>Release-Note:
>Audit-Trail:
>Unformatted:


More information about the freebsd-bugs mailing list