diff options
author | Vincent Bernat <vincent@bernat.im> | 2015-08-15 09:49:13 -0400 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2015-08-22 21:35:02 -0400 |
commit | 999b8b88c6060adf7a9b7907740ae86ace65291e (patch) | |
tree | b8d0860768745926227e32002bdd5c249fdd4a86 /net/9p/client.c | |
parent | 45e38cff4fce8d6871b5fa5e734e4dc9814d6056 (diff) |
9p: ensure err is initialized to 0 in p9_client_read/write
Some use of those functions were providing unitialized values to those
functions. Notably, when reading 0 bytes from an empty file on a 9P
filesystem, the return code of read() was not 0.
Tested with this simple program:
#include <assert.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
int main(int argc, const char **argv)
{
assert(argc == 2);
char buffer[256];
int fd = open(argv[1], O_RDONLY|O_NOCTTY);
assert(fd >= 0);
assert(read(fd, buffer, 0) == 0);
return 0;
}
Cc: stable@vger.kernel.org # v4.1
Signed-off-by: Vincent Bernat <vincent@bernat.im>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'net/9p/client.c')
-rw-r--r-- | net/9p/client.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/net/9p/client.c b/net/9p/client.c index 498454b3c06c..ea79ee9a7348 100644 --- a/net/9p/client.c +++ b/net/9p/client.c | |||
@@ -1541,6 +1541,7 @@ p9_client_read(struct p9_fid *fid, u64 offset, struct iov_iter *to, int *err) | |||
1541 | struct p9_client *clnt = fid->clnt; | 1541 | struct p9_client *clnt = fid->clnt; |
1542 | struct p9_req_t *req; | 1542 | struct p9_req_t *req; |
1543 | int total = 0; | 1543 | int total = 0; |
1544 | *err = 0; | ||
1544 | 1545 | ||
1545 | p9_debug(P9_DEBUG_9P, ">>> TREAD fid %d offset %llu %d\n", | 1546 | p9_debug(P9_DEBUG_9P, ">>> TREAD fid %d offset %llu %d\n", |
1546 | fid->fid, (unsigned long long) offset, (int)iov_iter_count(to)); | 1547 | fid->fid, (unsigned long long) offset, (int)iov_iter_count(to)); |
@@ -1620,6 +1621,7 @@ p9_client_write(struct p9_fid *fid, u64 offset, struct iov_iter *from, int *err) | |||
1620 | struct p9_client *clnt = fid->clnt; | 1621 | struct p9_client *clnt = fid->clnt; |
1621 | struct p9_req_t *req; | 1622 | struct p9_req_t *req; |
1622 | int total = 0; | 1623 | int total = 0; |
1624 | *err = 0; | ||
1623 | 1625 | ||
1624 | p9_debug(P9_DEBUG_9P, ">>> TWRITE fid %d offset %llu count %zd\n", | 1626 | p9_debug(P9_DEBUG_9P, ">>> TWRITE fid %d offset %llu count %zd\n", |
1625 | fid->fid, (unsigned long long) offset, | 1627 | fid->fid, (unsigned long long) offset, |