static struct clocksource *curr_clocksource;
 static LIST_HEAD(clocksource_list);
 static DEFINE_MUTEX(clocksource_mutex);
-static char override_name[32];
+#define CS_NAME_LEN            32
+static char override_name[CS_NAME_LEN];
 static int finished_booting;
 
 #ifdef CONFIG_CLOCKSOURCE_WATCHDOG
        return count;
 }
 
+static size_t clocksource_get_uname(const char *buf, char *dst, size_t cnt)
+{
+       size_t ret = cnt;
+
+       /* strings from sysfs write are not 0 terminated! */
+       if (!cnt || cnt >= CS_NAME_LEN)
+               return -EINVAL;
+
+       /* strip of \n: */
+       if (buf[cnt-1] == '\n')
+               cnt--;
+       if (cnt > 0)
+               memcpy(dst, buf, cnt);
+       dst[cnt] = 0;
+       return ret;
+}
+
 /**
  * sysfs_override_clocksource - interface for manually overriding clocksource
  * @dev:       unused
                                          struct device_attribute *attr,
                                          const char *buf, size_t count)
 {
-       size_t ret = count;
-
-       /* strings from sysfs write are not 0 terminated! */
-       if (count >= sizeof(override_name))
-               return -EINVAL;
-
-       /* strip of \n: */
-       if (buf[count-1] == '\n')
-               count--;
+       size_t ret;
 
        mutex_lock(&clocksource_mutex);
 
-       if (count > 0)
-               memcpy(override_name, buf, count);
-       override_name[count] = 0;
-       clocksource_select();
+       ret = clocksource_get_uname(buf, override_name, count);
+       if (ret >= 0)
+               clocksource_select();
 
        mutex_unlock(&clocksource_mutex);