From 6576672e090b7c5a831c75f07c45e7d9ff250bf5 Mon Sep 17 00:00:00 2001 From: Gregory Nutt Date: Sun, 5 Jul 2015 06:46:00 -0600 Subject: [PATCH] uname: version string must hold 40 character value; strings returned by uname must always be NUL terminated --- configs | 2 +- include/sys/utsname.h | 22 ++++++++++++++++------ libc/misc/lib_utsname.c | 21 +++++++++++++++++---- 3 files changed, 34 insertions(+), 11 deletions(-) diff --git a/configs b/configs index e51db57af1..011c54d78c 160000 --- a/configs +++ b/configs @@ -1 +1 @@ -Subproject commit e51db57af106b97ff12b37f3779c1067c1a3cfb6 +Subproject commit 011c54d78c920cd7bd0872638983444436e749dc diff --git a/include/sys/utsname.h b/include/sys/utsname.h index 9c41e033d8..cb1f96492b 100644 --- a/include/sys/utsname.h +++ b/include/sys/utsname.h @@ -46,19 +46,29 @@ * Pre-processor Definitions ****************************************************************************/ -#define SYS_NAMELEN 16 +#define SYS_NAMELEN 16 +#define VERSION_NAMELEN 41 /**************************************************************************** * Public Types ****************************************************************************/ +/* These are the values returned by uname: + * + * FIELD Default + * sysname NuttX + * nodename CONFIG_NET_HOSTNAME + * release From version.h + * version From version.h + * machine CONFIG_ARCH + */ struct utsname { - char sysname[SYS_NAMELEN]; /* Name of OS */ - char nodename[HOST_NAME_MAX]; /* Name of this network node */ - char release[SYS_NAMELEN]; /* Release level */ - char version[SYS_NAMELEN]; /* Version level */ - char machine[SYS_NAMELEN]; /* Hardware type */ + char sysname[SYS_NAMELEN]; /* Name of OS */ + char nodename[HOST_NAME_MAX]; /* Name of this network node */ + char release[SYS_NAMELEN]; /* Release level */ + char version[VERSION_NAMELEN]; /* Version level */ + char machine[SYS_NAMELEN]; /* Machine hardware */ }; /**************************************************************************** diff --git a/libc/misc/lib_utsname.c b/libc/misc/lib_utsname.c index 03f3796ca8..d2c87a50f6 100644 --- a/libc/misc/lib_utsname.c +++ b/libc/misc/lib_utsname.c @@ -44,6 +44,10 @@ #include +/**************************************************************************** + * Pre-processor Definitions + ****************************************************************************/ + /**************************************************************************** * Public Functions ****************************************************************************/ @@ -80,6 +84,8 @@ int uname(FAR struct utsname *name) { int ret = 1; + /* Copy the strings. Assure that each is NUL terminated. */ + strncpy(name->sysname, "NuttX", SYS_NAMELEN); #ifdef CONFIG_NET @@ -90,13 +96,20 @@ int uname(FAR struct utsname *name) ret = -1; } + name->nodename[HOST_NAME_MAX-1] = '\0'; + #else - strcpy(name->nodename, ""); + strncpy(name->nodename, "", HOST_NAME_MAX); #endif - strncpy(name->release, CONFIG_VERSION_STRING, SYS_NAMELEN); - strncpy(name->version, CONFIG_VERSION_BUILD, SYS_NAMELEN); - strncpy(name->machine, CONFIG_ARCH, SYS_NAMELEN); + strncpy(name->release, CONFIG_VERSION_STRING, SYS_NAMELEN); + name->release[SYS_NAMELEN-1] = '\0'; + + strncpy(name->version, CONFIG_VERSION_BUILD, VERSION_NAMELEN); + name->version[VERSION_NAMELEN-1] = '\0'; + + strncpy(name->machine, CONFIG_ARCH, SYS_NAMELEN); + name->machine[SYS_NAMELEN-1] = '\0'; return ret; }