[dm-devel] multipath-tools: Fix rtpg buffer length calculation

Benjamin Marzinski bmarzins at redhat.com
Wed Sep 2 19:40:17 UTC 2009


Since you use scsi_buflen to allocate the correct size for the
SCSI RTPG request buffer, You need to have the "+4" in its
calculation, not just in the check to see if the request buffer is
already big enough, otherwise, you'll fail the check, but you
won't allocate a new buffer that is big enough.

Signed-off-by: Benjamin Marzinski <bmarzins at redhat.com>
---
 libmultipath/prioritizers/alua_rtpg.c |    4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

Index: multipath-tools-090902/libmultipath/prioritizers/alua_rtpg.c
===================================================================
--- multipath-tools-090902.orig/libmultipath/prioritizers/alua_rtpg.c
+++ multipath-tools-090902/libmultipath/prioritizers/alua_rtpg.c
@@ -267,8 +267,8 @@ get_asymmetric_access_state(int fd, unsi
 	rc = do_rtpg(fd, buf, buflen);
 	if (rc < 0)
 		return rc;
-	scsi_buflen = buf[0] << 24 | buf[1] << 16 | buf[2] << 8 | buf[3];
-	if (buflen < (scsi_buflen + 4)) {
+	scsi_buflen = (buf[0] << 24 | buf[1] << 16 | buf[2] << 8 | buf[3]) + 4;
+	if (buflen < scsi_buflen) {
 		free(buf);
 		buf = (unsigned char *)malloc(scsi_buflen);
 		if (!buf) {




More information about the dm-devel mailing list