Description of problem: The funcion process_client in cman/daemon.c uses a static buffer of size MAX_CLUSTER_MESSAGE + sizeof(struct sock_header). MAX_CLUSTER_MESSAGE is 1500 bytes and struct sock_header at the timing of filing this bug is 20 bytes. 2 problems are discovered here and fixed by the patch committed to head (see url). The buffer is never cleaned and so data from previous usage will stay in the new one. There is no upper boundary check if the data we are reading from the socket are larger than the buffer itself. It was fairly simple to connect to cman and push a random 1520 bytes in the socket that will corrupt memory and eventually crash cman/aisexec. How reproducible: always Additional info: cvs HEAD has been fixed but i am told to submit a BZ for people to look into the different release branches. Patrick has been informed and agreed on the solution on CVS head. Submitting the bug on Lon request.
Check in for RHEL5 Checking in daemon.c; /cvs/cluster/cluster/cman/daemon/daemon.c,v <-- daemon.c new revision: 1.32.2.2; previous revision: 1.32.2.1 done
This request was evaluated by Red Hat Product Management for inclusion in a Red Hat Enterprise Linux maintenance release. Product Management has requested further review of this request by Red Hat Engineering, for potential inclusion in a Red Hat Enterprise Linux Update release for currently deployed products. This request is not yet committed for inclusion in an Update release.
An advisory has been issued which should help the problem described in this bug report. This report is therefore being closed with a resolution of ERRATA. For more information on the solution and/or where to find the updated files, please follow the link below. You may reopen this bug report if the solution does not work for you. http://rhn.redhat.com/errata/RHSA-2007-0559.html