Rotate a cylinder from XY plane to given points
When you say $acos(\|v\|\|p\|)$ are you saying $acos(\|\hat{v} \cdot \hat{p}\|)$? If not the second, your angle will be some bizarre thing (In fact, you'll always get 90deg).
How are you applying the rotation? glRotate? Have you tried glRotate with the negative of your estimated angle?
Are you doing rotation/scaling/translation in the right order? Could you post the actual code that is executing if it is short? (If not, then a small runnable excerpt?)


Also: I'd be quite careful, as the cross-product-as-axis approach will produce goofy results when $v \parallel u$.