[Linux-cluster] wrong error messages in fence-virt

Masatake YAMATO yamato at redhat.com
Thu Feb 5 09:57:58 UTC 2015


Is fence-virt still maintained?
I cannot find the git repository for it.
There is one at sf.net. However, it looks obsoleted.

With my broken configuration, I got following debug output from
fence_xvm...

    #  fence_xvm -H targethost -o status -dddddd
    Debugging threshold is now 6
    -- args @ 0x7fff762de810 --
    ...
    Opening /dev/urandom
    Sending to 225.0.0.12 via 192.168.122.113
    Waiting for connection from XVM host daemon.
    Issuing TCP challenge
>   read: Is a directory
    Invalid response to challenge
    Operation failed

Look at the line marked with '>'. The error message is strange for me
because as far as reading the source code, read is called with a socket connected
to fence_virtd.

So I conducted a code walking and found two bugs:

1. Checking the result of read( and write ) system call

   perror is called even if the call is successful.

2. "read" is specified as an argument for perror when write system call is faield.

Both are not critical if fence_virtd is configured well.
However, users may be confused when it is not well.


Followig patch is not tested at all but it represents what I want to
say in above list.

Masatake YAMATO


--- fence-virt-0.3.2/common/simple_auth.c	2013-11-05 01:08:35.000000000 +0900
+++ fence-virt-0.3.2/common/simple_auth.c.new	2015-02-05 18:40:53.471029118 +0900
@@ -260,9 +260,13 @@
 		return 0;
 	}
 
-	if (read(fd, response, sizeof(response)) < sizeof(response)) {
+	ret = read(fd, response, sizeof(response));
+	if (ret < 0) {
 		perror("read");
 		return 0;
+	} else if (ret < sizeof(response)) {
+		fprintf(stderr, "RESPONSE is too short(%d) in %s\n", ret, __FUNCTION__);
+		return 0;
 	}
 
 	ret = !memcmp(response, hash, sizeof(response));
@@ -333,7 +337,7 @@
 	HASH_Destroy(h);
 
 	if (write(fd, hash, sizeof(hash)) < sizeof(hash)) {
-		perror("read");
+		perror("write");
 		return 0;
 	}
 




More information about the Linux-cluster mailing list