ZooKeeper high cpu usage when invalid requests

                 Key: ZOOKEEPER-893
                 URL: https://issues.apache.org/jira/browse/ZOOKEEPER-893
             Project: Zookeeper
          Issue Type: Bug
          Components: server
    Affects Versions: 3.3.1
         Environment: Linux 2.6.16
4x Intel(R) Xeon(R) CPU X3320  @ 2.50GHz
java version "1.6.0_17"
Java(TM) SE Runtime Environment (build 1.6.0_17-b04)
Java HotSpot(TM) Server VM (build 14.3-b01, mixed mode)
            Reporter: Thijs Terlouw
            Priority: Critical

When ZooKeeper receives certain illegally formed messages on the internal 
communication port (:4181 by default), it's possible for ZooKeeper to enter an 
infinite loop which causes 100% cpu usage. It's related to ZOOKEEPER-427, but 
that patch does not resolve all issues.

from: src/java/main/org/apache/zookeeper/server/quorum/QuorumCnxManager.java 

the two affected parts:
int length = msgLength.getInt();                                                
if(length <= 0) {                                                               
    throw new IOException("Invalid packet length:" + length);                   

while (message.hasRemaining()) {                                                
    temp_numbytes = channel.read(message);                                      
    if(temp_numbytes < 0) {                                                     
        throw new IOException("Channel eof before end");                        
    numbytes += temp_numbytes;                                                  

how to replicate this bug:

perform an nmap portscan against your zookeeper server: "nmap -sV -n 
your.ip.here -p4181"
wait for a while untill you see some messages in the logfile and then you will 
see 100% cpu usage. It does not recover from this situation. With my patch, it 
does not occur anymore

This message is automatically generated by JIRA.
You can reply to this email to add a comment to the issue online.

Reply via email to