The upgrade option will trigger additional checks related to upgrade, for instance ASM upgrade related checks, so its clear that cluvfy hangs on these additional checks.
I remember we hit similar issue and it was related cluvfy was unable to check ASM version and related information.
Also, try the magic trick - go to your .profile and comment out the bash string, if exists. Rerun cluvfy.
First thing to do in your case is to identify where exactly cluvfy stuck. You can enable tracing by setting the environment variable
SRVM_TRACE to true, trace files are created in the
CV_HOME/cv/log directory. This will provide you with more information and you can raise a SR with oracle if needed.
In case you sure that all reqs are fine, you still can launch the installation ignoring the checks with -ignorePrereq option.