CVSROOT:        /cvs/cluster
Module name:    cluster
Branch:         RHEL4
Changes by:     [EMAIL PROTECTED]       2007-10-02 20:40:48

Modified files:
        cman-kernel/src: sm_message.c 

Log message:
        bz 199433
        
        The bad pointer dereferences aren't in process_messages() as the oops
        message shows, but in another function that's been inlined.  I think
        it's likely that process_leave_request() (or possibly
        process_join_request) are getting a NULL "sev" struct and using it.

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cman-kernel/src/sm_message.c.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.4.2.4&r2=1.4.2.5

--- cluster/cman-kernel/src/Attic/sm_message.c  2007/08/14 17:05:10     1.4.2.4
+++ cluster/cman-kernel/src/Attic/sm_message.c  2007/10/02 20:40:47     1.4.2.5
@@ -389,6 +389,15 @@
                 */
 
                if (test_bit(SGFL_SEVENT, &sg->flags)) {
+
+                       /* not sure how/when this happens */
+                       if (!sg->sevent) {
+                               log_print("process_join_request from %d "
+                                         "sevent flag no struct", nodeid);
+                               reply.ms_status = STATUS_NEG;
+                               goto send;
+                       }
+
                        sev = sg->sevent;
 
                        /*
@@ -581,6 +590,15 @@
 
                else if (test_bit(SGFL_SEVENT, &sg->flags) &&
                         nodeid != sm_our_nodeid) {
+
+                       /* not sure how/when this happens */
+                       if (!sg->sevent) {
+                               log_print("process_leave_request from %d "
+                                         "sevent flag no struct", nodeid);
+                               reply.ms_status = STATUS_NEG;
+                               goto out;
+                       }
+
                        sev = sg->sevent;
 
                        /*
@@ -625,7 +643,7 @@
                }
 
        }
-
+ out:
        smsg_bswap_out(&reply);
        send_nodeid_message((char *) &reply, sizeof(reply), nodeid);
 }

Reply via email to