Commit 818f2f57 authored by Dan Carpenter's avatar Dan Carpenter Committed by J. Bruce Fields

nfsd: minor off by one checks in __write_versions()

My static checker complains that if "len == remaining" then it means we
have truncated the last character off the version string.

The intent of the code is that we print as many versions as we can
without truncating a version.  Then we put a newline at the end.  If the
newline can't fit we return -EINVAL.
Signed-off-by: default avatarDan Carpenter <dan.carpenter@oracle.com>
Reviewed-by: default avatarJeff Layton <jlayton@primarydata.com>
Signed-off-by: default avatarJ. Bruce Fields <bfields@redhat.com>
parent 067f96ef
...@@ -606,7 +606,7 @@ static ssize_t __write_versions(struct file *file, char *buf, size_t size) ...@@ -606,7 +606,7 @@ static ssize_t __write_versions(struct file *file, char *buf, size_t size)
num); num);
sep = " "; sep = " ";
if (len > remaining) if (len >= remaining)
break; break;
remaining -= len; remaining -= len;
buf += len; buf += len;
...@@ -621,7 +621,7 @@ static ssize_t __write_versions(struct file *file, char *buf, size_t size) ...@@ -621,7 +621,7 @@ static ssize_t __write_versions(struct file *file, char *buf, size_t size)
'+' : '-', '+' : '-',
minor); minor);
if (len > remaining) if (len >= remaining)
break; break;
remaining -= len; remaining -= len;
buf += len; buf += len;
...@@ -629,7 +629,7 @@ static ssize_t __write_versions(struct file *file, char *buf, size_t size) ...@@ -629,7 +629,7 @@ static ssize_t __write_versions(struct file *file, char *buf, size_t size)
} }
len = snprintf(buf, remaining, "\n"); len = snprintf(buf, remaining, "\n");
if (len > remaining) if (len >= remaining)
return -EINVAL; return -EINVAL;
return tlen + len; return tlen + len;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment