Commit a7367997 authored by Harald Freudenberger's avatar Harald Freudenberger Committed by Vasily Gorbik
Browse files

s390/zcrypt: ep11 structs rework, export zcrypt_send_ep11_cprb



Minor rework for struct ep11_cprb and struct ep11_urb. Use of u8, u16,
u32 instead of unsigned char. Declare pointers to mem from userspace
with __user to give sparse a chance to check.

Export zcrypt_send_ep11_cprb() function as this function will be
called by code in progress which will build ep11 cprbs within the
zcrypt device driver zoo and send them to EP11 crypto cards.

Signed-off-by: default avatarHarald Freudenberger <freude@linux.ibm.com>
Signed-off-by: default avatarVasily Gorbik <gor@linux.ibm.com>
parent 8f291ebf
Loading
Loading
Loading
Loading
+14 −14
Original line number Diff line number Diff line
@@ -162,10 +162,10 @@ struct ica_xcRB {
 */
struct ep11_cprb {
	__u16	cprb_len;
	unsigned char	cprb_ver_id;
	unsigned char	pad_000[2];
	unsigned char	flags;
	unsigned char	func_id[2];
	__u8	cprb_ver_id;
	__u8	pad_000[2];
	__u8	flags;
	__u8	func_id[2];
	__u32	source_id;
	__u32	target_id;
	__u32	ret_code;
@@ -197,13 +197,13 @@ struct ep11_target_dev {
 */
struct ep11_urb {
	__u16		targets_num;
	__u64		targets;
	__u8 __user    *targets;
	__u64		weight;
	__u64		req_no;
	__u64		req_len;
	__u64		req;
	__u8 __user    *req;
	__u64		resp_len;
	__u64		resp;
	__u8 __user    *resp;
} __attribute__((packed));

/**
+10 −4
Original line number Diff line number Diff line
@@ -923,7 +923,7 @@ static bool is_desired_ep11_queue(unsigned int dev_qid,
	return false;
}

static long zcrypt_send_ep11_cprb(struct ap_perms *perms,
static long _zcrypt_send_ep11_cprb(struct ap_perms *perms,
				   struct ep11_urb *xcrb)
{
	struct zcrypt_card *zc, *pref_zc;
@@ -1029,6 +1029,12 @@ out:
	return rc;
}

long zcrypt_send_ep11_cprb(struct ep11_urb *xcrb)
{
	return _zcrypt_send_ep11_cprb(&ap_perms, xcrb);
}
EXPORT_SYMBOL(zcrypt_send_ep11_cprb);

static long zcrypt_rng(char *buffer)
{
	struct zcrypt_card *zc, *pref_zc;
@@ -1369,12 +1375,12 @@ static long zcrypt_unlocked_ioctl(struct file *filp, unsigned int cmd,
		if (copy_from_user(&xcrb, uxcrb, sizeof(xcrb)))
			return -EFAULT;
		do {
			rc = zcrypt_send_ep11_cprb(perms, &xcrb);
			rc = _zcrypt_send_ep11_cprb(perms, &xcrb);
		} while (rc == -EAGAIN);
		/* on failure: retry once again after a requested rescan */
		if ((rc == -ENODEV) && (zcrypt_process_rescan()))
			do {
				rc = zcrypt_send_ep11_cprb(perms, &xcrb);
				rc = _zcrypt_send_ep11_cprb(perms, &xcrb);
			} while (rc == -EAGAIN);
		if (rc)
			ZCRYPT_DBF(DBF_DEBUG, "ioctl ZSENDEP11CPRB rc=%d\n", rc);
+1 −0
Original line number Diff line number Diff line
@@ -140,6 +140,7 @@ struct zcrypt_ops *zcrypt_msgtype(unsigned char *, int);
int zcrypt_api_init(void);
void zcrypt_api_exit(void);
long zcrypt_send_cprb(struct ica_xcRB *xcRB);
long zcrypt_send_ep11_cprb(struct ep11_urb *urb);
void zcrypt_device_status_mask_ext(struct zcrypt_device_status_ext *devstatus);
int zcrypt_device_status_ext(int card, int queue,
			     struct zcrypt_device_status_ext *devstatus);