Commit 7e202acb authored by Harald Freudenberger's avatar Harald Freudenberger Committed by Heiko Carstens
Browse files

s390/zcrypt: split ioctl function into smaller code units



The zcrpyt_unlocked_ioctl() function has become large. So split away
into new static functions the 4 ioctl ICARSAMODEXPO, ICARSACRT,
ZSECSENDCPRB and ZSENDEP11CPRB. This makes the code more readable and
is a preparation step for further improvements needed on these ioctls.

Signed-off-by: default avatarHarald Freudenberger <freude@linux.ibm.com>
Signed-off-by: default avatarHeiko Carstens <heiko.carstens@de.ibm.com>
parent 74ecbef7
Loading
Loading
Loading
Loading
+92 −72
Original line number Diff line number Diff line
@@ -1298,21 +1298,11 @@ static int zcrypt_requestq_count(void)
	return requestq_count;
}

static long zcrypt_unlocked_ioctl(struct file *filp, unsigned int cmd,
				  unsigned long arg)
static int icarsamodexpo_ioctl(struct ap_perms *perms, unsigned long arg)
{
	int rc;
	struct ap_perms *perms =
		(struct ap_perms *) filp->private_data;

	rc = zcrypt_check_ioctl(perms, cmd);
	if (rc)
		return rc;

	switch (cmd) {
	case ICARSAMODEXPO: {
		struct ica_rsa_modexpo __user *umex = (void __user *) arg;
	struct ica_rsa_modexpo mex;
	struct ica_rsa_modexpo __user *umex = (void __user *) arg;

	if (copy_from_user(&mex, umex, sizeof(mex)))
		return -EFAULT;
@@ -1330,9 +1320,12 @@ static long zcrypt_unlocked_ioctl(struct file *filp, unsigned int cmd,
	}
	return put_user(mex.outputdatalength, &umex->outputdatalength);
}
	case ICARSACRT: {
		struct ica_rsa_modexpo_crt __user *ucrt = (void __user *) arg;

static int icarsacrt_ioctl(struct ap_perms *perms, unsigned long arg)
{
	int rc;
	struct ica_rsa_modexpo_crt crt;
	struct ica_rsa_modexpo_crt __user *ucrt = (void __user *) arg;

	if (copy_from_user(&crt, ucrt, sizeof(crt)))
		return -EFAULT;
@@ -1350,9 +1343,12 @@ static long zcrypt_unlocked_ioctl(struct file *filp, unsigned int cmd,
	}
	return put_user(crt.outputdatalength, &ucrt->outputdatalength);
}
	case ZSECSENDCPRB: {
		struct ica_xcRB __user *uxcRB = (void __user *) arg;

static int zsecsendcprb_ioctl(struct ap_perms *perms, unsigned long arg)
{
	int rc;
	struct ica_xcRB xcRB;
	struct ica_xcRB __user *uxcRB = (void __user *) arg;

	if (copy_from_user(&xcRB, uxcRB, sizeof(xcRB)))
		return -EFAULT;
@@ -1371,9 +1367,12 @@ static long zcrypt_unlocked_ioctl(struct file *filp, unsigned int cmd,
		return -EFAULT;
	return rc;
}
	case ZSENDEP11CPRB: {
		struct ep11_urb __user *uxcrb = (void __user *)arg;

static int zsendep11cprb_ioctl(struct ap_perms *perms, unsigned long arg)
{
	int rc;
	struct ep11_urb xcrb;
	struct ep11_urb __user *uxcrb = (void __user *)arg;

	if (copy_from_user(&xcrb, uxcrb, sizeof(xcrb)))
		return -EFAULT;
@@ -1391,6 +1390,27 @@ static long zcrypt_unlocked_ioctl(struct file *filp, unsigned int cmd,
		return -EFAULT;
	return rc;
}

static long zcrypt_unlocked_ioctl(struct file *filp, unsigned int cmd,
				  unsigned long arg)
{
	int rc;
	struct ap_perms *perms =
		(struct ap_perms *) filp->private_data;

	rc = zcrypt_check_ioctl(perms, cmd);
	if (rc)
		return rc;

	switch (cmd) {
	case ICARSAMODEXPO:
		return icarsamodexpo_ioctl(perms, arg);
	case ICARSACRT:
		return icarsacrt_ioctl(perms, arg);
	case ZSECSENDCPRB:
		return zsecsendcprb_ioctl(perms, arg);
	case ZSENDEP11CPRB:
		return zsendep11cprb_ioctl(perms, arg);
	case ZCRYPT_DEVICE_STATUS: {
		struct zcrypt_device_status_ext *device_status;
		size_t total_size = MAX_ZDEV_ENTRIES_EXT