Blob Blame History Raw
From 9a0e5ff6413048fb2367b0d7532ebb9ae3d4fc90 Mon Sep 17 00:00:00 2001
From: Jiffin Tony Thottan <jthottan@redhat.com>
Date: Thu, 23 Jun 2016 12:20:03 +0530
Subject: [PATCH 198/198] gfapi : check the value "iovec" in glfs_io_async_cbk only for read

The glfs_io_async_cbk() is called from the cbk of all the async ops
such as write, read, fsync, ftruncate. In all other cases, expect for
read the value for "iovec" is NULL. From the code, glfs_io_async_cbk
checks the value in common routine which may end up in failures.

Thanks Joe Julian for finding issue and suggesting the fix.

Backport of:
Cherry picked from commit 82a5e6cdacd9310f04830c47fd22e0aa9b7b7251:
> Cherry picked from commit 61d72b3d91f2655b04de4ef29262f738a8cf7369:
>> Change-Id: I0be0123da68f9d8fbb5d94ede2d45566a9add6a5
>> BUG: 1349276
>> Signed-off-by: Jiffin Tony Thottan <jthottan@redhat.com>
>> Reported-by: Joe Julian <me@joejulian.name>
>> Reviewed-on: http://review.gluster.org/14779
>> Reviewed-by: Niels de Vos <ndevos@redhat.com>
>> Smoke: Gluster Build System <jenkins@build.gluster.org>
>> Tested-by: Kaleb KEITHLEY <kkeithle@redhat.com>
>> NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org>
>> CentOS-regression: Gluster Build System <jenkins@build.gluster.org>
>> Reviewed-by: Joe Julian <me@joejulian.name>

> Change-Id: I0be0123da68f9d8fbb5d94ede2d45566a9add6a5
> BUG: 1350880
> Reported-by: Joe Julian <me@joejulian.name>
> Signed-off-by: Niels de Vos <ndevos@redhat.com>
> Reviewed-on: http://review.gluster.org/14822
> Smoke: Gluster Build System <jenkins@build.gluster.org>
> NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org>
> Reviewed-by: Kaleb KEITHLEY <kkeithle@redhat.com>
> CentOS-regression: Gluster Build System <jenkins@build.gluster.org>
> Reviewed-by: jiffin tony Thottan <jthottan@redhat.com>

this fixes BZ 1369412 as well

Change-Id: Ifbc280535c39f7983a9bcb2e85eb08371c18a791
BUG: 1369390
Signed-off-by: Prasanna Kumar Kalever <prasanna.kalever@redhat.com>
Reviewed-on: https://code.engineering.redhat.com/gerrit/82404
Reviewed-by: Jiffin Thottan <jthottan@redhat.com>
Reviewed-by: Rajesh Joseph <rjoseph@redhat.com>
---
 api/src/glfs-fops.c |    7 ++++++-
 1 files changed, 6 insertions(+), 1 deletions(-)

diff --git a/api/src/glfs-fops.c b/api/src/glfs-fops.c
index e396221..62a17f2 100644
--- a/api/src/glfs-fops.c
+++ b/api/src/glfs-fops.c
@@ -743,7 +743,6 @@ glfs_io_async_cbk (int op_ret, int op_errno, call_frame_t *frame,
 
         GF_VALIDATE_OR_GOTO ("gfapi", frame, inval);
         GF_VALIDATE_OR_GOTO ("gfapi", cookie, inval);
-        GF_VALIDATE_OR_GOTO ("gfapi", iovec, inval);
 
         gio = frame->local;
         frame->local = NULL;
@@ -757,6 +756,12 @@ glfs_io_async_cbk (int op_ret, int op_errno, call_frame_t *frame,
         if (op_ret <= 0) {
                 goto out;
         } else if (gio->op == GF_FOP_READ) {
+                if (!iovec) {
+                        op_ret = -1;
+                        op_errno = EINVAL;
+                        goto out;
+                }
+
                 op_ret = iov_copy (gio->iov, gio->count, iovec, count);
                 glfd->offset = gio->offset + op_ret;
         } else if (gio->op == GF_FOP_WRITE) {
-- 
1.7.1