[PATCH] ceph: check return value of ceph_get_cap()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



ceph_get_cap() can return NULL, so should check return value carefully
in case of using NULL pointer unexpectedly.

Signed-off-by: Chengguang Xu <cgxu519@xxxxxxxxxx>
---
Only compile tested.

 fs/ceph/caps.c | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/fs/ceph/caps.c b/fs/ceph/caps.c
index 6582c45..9ef40ae 100644
--- a/fs/ceph/caps.c
+++ b/fs/ceph/caps.c
@@ -3510,6 +3510,10 @@ static void handle_cap_export(struct inode *inode, struct ceph_mds_caps *ex,
 	} else if (tsession) {
 		/* add placeholder for the export tagert */
 		int flag = (cap == ci->i_auth_cap) ? CEPH_CAP_FLAG_AUTH : 0;
+
+		if (!new_cap)
+			goto out_unlock;
+
 		tcap = new_cap;
 		ceph_add_cap(inode, tsession, t_cap_id, -1, issued, 0,
 			     t_seq - 1, t_mseq, (u64)-1, flag, &new_cap);
@@ -3764,6 +3768,11 @@ void ceph_handle_caps(struct ceph_mds_session *session,
 
 		if (op == CEPH_CAP_OP_IMPORT) {
 			cap = ceph_get_cap(mdsc, NULL);
+			if (!cap) {
+				pr_err("%s: can't get cap\n", __func__);
+				goto bad_cap;
+			}
+
 			cap->cap_ino = vino.ino;
 			cap->queue_release = 1;
 			cap->cap_id = le64_to_cpu(h->cap_id);
@@ -3864,6 +3873,7 @@ void ceph_handle_caps(struct ceph_mds_session *session,
 
 bad:
 	pr_err("ceph_handle_caps: corrupt message\n");
+bad_cap:
 	ceph_msg_dump(msg);
 	return;
 }
-- 
1.8.3.1

--
To unsubscribe from this list: send the line "unsubscribe ceph-devel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [CEPH Users]     [Ceph Large]     [Information on CEPH]     [Linux BTRFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]
  Powered by Linux