浏览代码

Fix a weird behavior of a function

The procfile_write prints the content what user writes into. However,
when the content size is greater than or equal to PROCFS_MAX_SIZE,
procfile_write will print nothing, because the index for appending the
tail NULL character will be modulo to 0, which is an off-by-one error.

This fixes the problem by changing the upper bound of procfs_buffer_size
to (PROCFS_MAX_SIZE - 1), leaving one byte for NULL character. After
the change, we can discard the modulo because the range of
procfs_buffer_size is already between 0 and (PROCFS_MAX_SIZE - 1).
Bob Lee 6 月之前
父节点
当前提交
d1d2a2b031
共有 1 个文件被更改,包括 3 次插入3 次删除
  1. 3 3
      examples/procfs2.c

+ 3 - 3
examples/procfs2.c

@@ -48,13 +48,13 @@ static ssize_t procfile_write(struct file *file, const char __user *buff,
                               size_t len, loff_t *off)
 {
     procfs_buffer_size = len;
-    if (procfs_buffer_size > PROCFS_MAX_SIZE)
-        procfs_buffer_size = PROCFS_MAX_SIZE;
+    if (procfs_buffer_size >= PROCFS_MAX_SIZE)
+        procfs_buffer_size = PROCFS_MAX_SIZE - 1;
 
     if (copy_from_user(procfs_buffer, buff, procfs_buffer_size))
         return -EFAULT;
 
-    procfs_buffer[procfs_buffer_size & (PROCFS_MAX_SIZE - 1)] = '\0';
+    procfs_buffer[procfs_buffer_size] = '\0';
     *off += procfs_buffer_size;
     pr_info("procfile write %s\n", procfs_buffer);