I think this is serious problem, because it happened again and i'm 100% sure that this is because of the code above, Tomcat loads CPU 100% and Richfaces team should open JIRA if it is still not open.
Probably InputStream in Linux not always return -1 on read() in case of stream is closed, but this should be a very strange Java bug.
Please verify this code and as a strut you can include a increment counter to return from the cycle.
Thanks and awating an answer from Richfaces team.
I posted the issue in JIRA: http://jira.jboss.com/jira/browse/RF-3746.
I think this is very hard to reproduce.
But I plan to make some changes in MultipartRequest code to avoid infinitive loop in any possible case.