size_t count, loff_t *off)
{
struct ldlm_namespace *ns = ((struct seq_file *)file->private_data)->private;
- char dummy[MAX_STRING_SIZE + 1], *end;
- unsigned long tmp;
- int lru_resize;
+ char dummy[MAX_STRING_SIZE + 1];
+ char *end;
+ unsigned long tmp;
+ int lru_resize;
- dummy[MAX_STRING_SIZE] = '\0';
- if (copy_from_user(dummy, buffer, MAX_STRING_SIZE))
- return -EFAULT;
+ if (count >= sizeof(dummy))
+ return -EINVAL;
+
+ if (count == 0)
+ return 0;
+
+ if (copy_from_user(dummy, buffer, count))
+ return -EFAULT;
+
+ dummy[count] = 0;
if (strncmp(dummy, "clear", 5) == 0) {
CDEBUG(D_DLMTRACE,
int lprocfs_wr_uint(struct file *file, const char __user *buffer,
unsigned long count, void *data)
{
- unsigned *p = data;
- char dummy[MAX_STRING_SIZE + 1], *end;
- unsigned long tmp;
+ unsigned *p = data;
+ char dummy[MAX_STRING_SIZE + 1];
+ char *end;
+ unsigned long tmp;
- dummy[MAX_STRING_SIZE] = '\0';
- if (copy_from_user(dummy, buffer, MAX_STRING_SIZE))
- return -EFAULT;
+ if (count >= sizeof(dummy))
+ return -EINVAL;
- tmp = simple_strtoul(dummy, &end, 0);
- if (dummy == end)
- return -EINVAL;
+ if (count == 0)
+ return 0;
+
+ if (copy_from_user(dummy, buffer, count))
+ return -EFAULT;
- *p = (unsigned int)tmp;
- return count;
+ dummy[count] = 0;
+
+ tmp = simple_strtoul(dummy, &end, 0);
+ if (dummy == end)
+ return -EINVAL;
+
+ *p = (unsigned int)tmp;
+ return count;
}
EXPORT_SYMBOL(lprocfs_wr_uint);