diff mbox

[V9fs-developer] 9p: ensure err is initialized to 0 in p9_client_read/write

Message ID 1439646553-24961-1-git-send-email-vincent@bernat.im (mailing list archive)
State Accepted, archived
Delegated to: Eric Van Hensbergen
Headers show

Commit Message

Vincent Bernat Aug. 15, 2015, 1:49 p.m. UTC
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;
    }

Signed-off-by: Vincent Bernat <vincent@bernat.im>
---
 net/9p/client.c | 2 ++
 1 file changed, 2 insertions(+)

Comments

Al Viro Aug. 19, 2015, 3:49 a.m. UTC | #1
On Sat, Aug 15, 2015 at 03:49:13PM +0200, Vincent Bernat wrote:

ACK, and IMO that should go into mainline before 4.2; I can take it via
vfs.git, unless 9p folks prefer it to go through their tree.

------------------------------------------------------------------------------
Eric Van Hensbergen Aug. 19, 2015, 8:33 p.m. UTC | #2
ACK, you can probably fast track this before the merge window better than I
can Al, I'm on holiday at the moment so it might take a bit longer for me
to tee it up.

On Tue, Aug 18, 2015 at 10:49 PM Al Viro <viro@zeniv.linux.org.uk> wrote:

> On Sat, Aug 15, 2015 at 03:49:13PM +0200, Vincent Bernat wrote:
>
> ACK, and IMO that should go into mainline before 4.2; I can take it via
> vfs.git, unless 9p folks prefer it to go through their tree.
>
------------------------------------------------------------------------------
diff mbox

Patch

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)
 	struct p9_client *clnt = fid->clnt;
 	struct p9_req_t *req;
 	int total = 0;
+	*err = 0;
 
 	p9_debug(P9_DEBUG_9P, ">>> TREAD fid %d offset %llu %d\n",
 		   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)
 	struct p9_client *clnt = fid->clnt;
 	struct p9_req_t *req;
 	int total = 0;
+	*err = 0;
 
 	p9_debug(P9_DEBUG_9P, ">>> TWRITE fid %d offset %llu count %zd\n",
 				fid->fid, (unsigned long long) offset,