[PATCH 5/7] osd_client: improve safety of osd_req_op_data() macro

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

 



The osd_req_op_data() macro uses (and thus evaluates) two of its
parameters more than once.  This isn't guaranteed safe.  Define and
use some local variables to fix that.

Signed-off-by: Alex Elder <elder@xxxxxxxxxx>
---
 net/ceph/osd_client.c | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/net/ceph/osd_client.c b/net/ceph/osd_client.c
index 6539dfc..4602442 100644
--- a/net/ceph/osd_client.c
+++ b/net/ceph/osd_client.c
@@ -120,10 +120,13 @@ static void ceph_osd_data_bio_init(struct ceph_osd_data *osd_data,
 }
 #endif /* CONFIG_BLOCK */
 
-#define osd_req_op_data(oreq, whch, typ, fld)	\
-	({						\
-		BUG_ON(whch >= (oreq)->r_num_ops);	\
-		&(oreq)->r_ops[whch].typ.fld;		\
+#define osd_req_op_data(oreq, whch, typ, fld)				\
+	({								\
+		struct ceph_osd_request *__oreq = (oreq);		\
+		unsigned int __whch = (whch);				\
+									\
+		BUG_ON(__whch >= __oreq->r_num_ops);			\
+		&__oreq->r_ops[__whch].typ.fld;				\
 	})
 
 static struct ceph_osd_data *
-- 
2.1.0

--
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