if (copied == 0) {
                                unsigned int len;
                                spin_unlock_bh(&zcrypt_device_lock);
-                               /* len is max 256 / 2 - 120 = 8 */
-                               len = crt->inputdatalength / 2 - 120;
+                               /* len is max 256 / 2 - 120 = 8
+                                * For bigger device just assume len of leading
+                                * 0s is 8 as stated in the requirements for
+                                * ica_rsa_modexpo_crt struct in zcrypt.h.
+                                */
+                               if (crt->inputdatalength <= 256)
+                                       len = crt->inputdatalength / 2 - 120;
+                               else
+                                       len = 8;
                                if (len > sizeof(z1))
                                        return -EFAULT;
                                z1 = z2 = z3 = 0;
                                    copy_from_user(&z2, crt->bp_key, len) ||
                                    copy_from_user(&z3, crt->u_mult_inv, len))
                                        return -EFAULT;
+                               z1 = z2 = z3 = 0;
                                copied = 1;
                                /*
                                 * We have to restart device lookup -