nfs: Check for null buf, and set op_errno to EIO not 0

Summary:
- Prevent crashes for the case where "getattr" actually failed and
  returned with a NULL buf, but the op_errno was set to 0.
- This is a cherry-pick of D1571184

Signed-off-by: Shreyas Siravara <sshreyas@fb.com>
Change-Id: Ia2d6ad7539df714f9420dcf063c7c14e727bb7e3
BUG: 1428064
Reviewed-on: http://review.gluster.org/16152
Smoke: Gluster Build System <jenkins@build.gluster.org>
NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org>
CentOS-regression: Gluster Build System <jenkins@build.gluster.org>
Reviewed-by: Kevin Vigor <kvigor@fb.com>
Reviewed-on: https://review.gluster.org/16803
Reviewed-by: Amar Tumballi <amarts@redhat.com>
Tested-by: Jeff Darcy <jeff@pl.atyp.us>
Reviewed-by: Jeff Darcy <jeff@pl.atyp.us>
This commit is contained in:
Richard Wareing 2014-09-22 17:42:04 -07:00 committed by Jeff Darcy
parent 63a39c7641
commit 3579aaaef0

View File

@ -862,6 +862,12 @@ nfs3svc_getattr_stat_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
cs = frame->local;
if (op_ret == -1) {
/* Prevent crashes for the case where this call fails
* and buf is left in a NULL state, yet the op_errno == 0.
*/
if (!buf && op_errno == 0) {
op_errno = EIO;
}
status = nfs3_cbk_errno_status (op_ret, op_errno);
}