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

s390/zcrypt: remove set_fs() invocation in zcrypt device driver



This patch reworks the zcrypt device driver so that the set_fs()
invocation is not needed any more. Instead there is a new flag bool
userspace passed through all the functions which tells if the pointer
arguments are userspace or kernelspace. Together with the two new
inline functions z_copy_from_user() and z_copy_to_user() which either
invoke copy_from_user (userspace is true) or memcpy (userspace is
false) the zcrypt dd and the AP bus now has no requirement for
the set_fs() functionality any more.

Signed-off-by: default avatarHarald Freudenberger <freude@linux.ibm.com>
Reviewed-by: default avatarIngo Franzki <ifranzki@linux.ibm.com>
Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
Signed-off-by: default avatarHeiko Carstens <hca@linux.ibm.com>
Signed-off-by: default avatarVasily Gorbik <gor@linux.ibm.com>
parent c360c9a2
Loading
Loading
Loading
Loading
+15 −15
Original line number Diff line number Diff line
@@ -797,7 +797,7 @@ static long zcrypt_rsa_crt(struct ap_perms *perms,
	return rc;
}

static long _zcrypt_send_cprb(struct ap_perms *perms,
static long _zcrypt_send_cprb(bool userspace, struct ap_perms *perms,
			      struct ica_xcRB *xcRB)
{
	struct zcrypt_card *zc, *pref_zc;
@@ -813,7 +813,7 @@ static long _zcrypt_send_cprb(struct ap_perms *perms,

	xcRB->status = 0;
	ap_init_message(&ap_msg);
	rc = get_cprb_fc(xcRB, &ap_msg, &func_code, &domain);
	rc = get_cprb_fc(userspace, xcRB, &ap_msg, &func_code, &domain);
	if (rc)
		goto out;

@@ -878,7 +878,7 @@ static long _zcrypt_send_cprb(struct ap_perms *perms,
	if (*domain == AUTOSEL_DOM)
		*domain = AP_QID_QUEUE(qid);

	rc = pref_zq->ops->send_cprb(pref_zq, xcRB, &ap_msg);
	rc = pref_zq->ops->send_cprb(userspace, pref_zq, xcRB, &ap_msg);

	spin_lock(&zcrypt_list_lock);
	zcrypt_drop_queue(pref_zc, pref_zq, mod, weight);
@@ -893,7 +893,7 @@ static long _zcrypt_send_cprb(struct ap_perms *perms,

long zcrypt_send_cprb(struct ica_xcRB *xcRB)
{
	return _zcrypt_send_cprb(&ap_perms, xcRB);
	return _zcrypt_send_cprb(false, &ap_perms, xcRB);
}
EXPORT_SYMBOL(zcrypt_send_cprb);

@@ -924,7 +924,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(bool userspace, struct ap_perms *perms,
				   struct ep11_urb *xcrb)
{
	struct zcrypt_card *zc, *pref_zc;
@@ -956,7 +956,7 @@ static long _zcrypt_send_ep11_cprb(struct ap_perms *perms,
		}

		uptr = (struct ep11_target_dev __force __user *) xcrb->targets;
		if (copy_from_user(targets, uptr,
		if (z_copy_from_user(userspace, targets, uptr,
				   target_num * sizeof(*targets))) {
			func_code = 0;
			rc = -EFAULT;
@@ -964,7 +964,7 @@ static long _zcrypt_send_ep11_cprb(struct ap_perms *perms,
		}
	}

	rc = get_ep11cprb_fc(xcrb, &ap_msg, &func_code);
	rc = get_ep11cprb_fc(userspace, xcrb, &ap_msg, &func_code);
	if (rc)
		goto out_free;

@@ -1015,7 +1015,7 @@ static long _zcrypt_send_ep11_cprb(struct ap_perms *perms,
	}

	qid = pref_zq->queue->qid;
	rc = pref_zq->ops->send_ep11_cprb(pref_zq, xcrb, &ap_msg);
	rc = pref_zq->ops->send_ep11_cprb(userspace, pref_zq, xcrb, &ap_msg);

	spin_lock(&zcrypt_list_lock);
	zcrypt_drop_queue(pref_zc, pref_zq, mod, weight);
@@ -1032,7 +1032,7 @@ static long _zcrypt_send_ep11_cprb(struct ap_perms *perms,

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

@@ -1353,12 +1353,12 @@ static int zsecsendcprb_ioctl(struct ap_perms *perms, unsigned long arg)
	if (copy_from_user(&xcRB, uxcRB, sizeof(xcRB)))
		return -EFAULT;
	do {
		rc = _zcrypt_send_cprb(perms, &xcRB);
		rc = _zcrypt_send_cprb(true, perms, &xcRB);
	} while (rc == -EAGAIN);
	/* on failure: retry once again after a requested rescan */
	if ((rc == -ENODEV) && (zcrypt_process_rescan()))
		do {
			rc = _zcrypt_send_cprb(perms, &xcRB);
			rc = _zcrypt_send_cprb(true, perms, &xcRB);
		} while (rc == -EAGAIN);
	if (rc)
		ZCRYPT_DBF(DBF_DEBUG, "ioctl ZSENDCPRB rc=%d status=0x%x\n",
@@ -1377,12 +1377,12 @@ static int zsendep11cprb_ioctl(struct ap_perms *perms, unsigned long arg)
	if (copy_from_user(&xcrb, uxcrb, sizeof(xcrb)))
		return -EFAULT;
	do {
		rc = _zcrypt_send_ep11_cprb(perms, &xcrb);
		rc = _zcrypt_send_ep11_cprb(true, 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(true, perms, &xcrb);
		} while (rc == -EAGAIN);
	if (rc)
		ZCRYPT_DBF(DBF_DEBUG, "ioctl ZSENDEP11CPRB rc=%d\n", rc);
@@ -1655,12 +1655,12 @@ static long trans_xcRB32(struct ap_perms *perms, struct file *filp,
	xcRB64.priority_window = xcRB32.priority_window;
	xcRB64.status = xcRB32.status;
	do {
		rc = _zcrypt_send_cprb(perms, &xcRB64);
		rc = _zcrypt_send_cprb(true, perms, &xcRB64);
	} while (rc == -EAGAIN);
	/* on failure: retry once again after a requested rescan */
	if ((rc == -ENODEV) && (zcrypt_process_rescan()))
		do {
			rc = _zcrypt_send_cprb(perms, &xcRB64);
			rc = _zcrypt_send_cprb(true, perms, &xcRB64);
		} while (rc == -EAGAIN);
	xcRB32.reply_control_blk_length = xcRB64.reply_control_blk_length;
	xcRB32.reply_data_length = xcRB64.reply_data_length;
+24 −2
Original line number Diff line number Diff line
@@ -59,9 +59,9 @@ struct zcrypt_ops {
	long (*rsa_modexpo)(struct zcrypt_queue *, struct ica_rsa_modexpo *);
	long (*rsa_modexpo_crt)(struct zcrypt_queue *,
				struct ica_rsa_modexpo_crt *);
	long (*send_cprb)(struct zcrypt_queue *, struct ica_xcRB *,
	long (*send_cprb)(bool userspace, struct zcrypt_queue *, struct ica_xcRB *,
			  struct ap_message *);
	long (*send_ep11_cprb)(struct zcrypt_queue *, struct ep11_urb *,
	long (*send_ep11_cprb)(bool userspace, struct zcrypt_queue *, struct ep11_urb *,
			       struct ap_message *);
	long (*rng)(struct zcrypt_queue *, char *, struct ap_message *);
	struct list_head list;		/* zcrypt ops list. */
@@ -145,4 +145,26 @@ 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);

static inline unsigned long z_copy_from_user(bool userspace,
					     void *to,
					     const void __user *from,
					     unsigned long n)
{
	if (likely(userspace))
		return copy_from_user(to, from, n);
	memcpy(to, (void __force *) from, n);
	return 0;
}

static inline unsigned long z_copy_to_user(bool userspace,
					   void __user *to,
					   const void *from,
					   unsigned long n)
{
	if (likely(userspace))
		return copy_to_user(to, from, n);
	memcpy((void __force *) to, from, n);
	return 0;
}

#endif /* _ZCRYPT_API_H_ */
+7 −25
Original line number Diff line number Diff line
@@ -248,24 +248,6 @@ static inline void prep_xcrb(struct ica_xcRB *pxcrb,
	pxcrb->reply_control_blk_addr = (void __user *) prepcblk;
}

/*
 * Helper function which calls zcrypt_send_cprb with
 * memory management segment adjusted to kernel space
 * so that the copy_from_user called within this
 * function do in fact copy from kernel space.
 */
static inline int _zcrypt_send_cprb(struct ica_xcRB *xcrb)
{
	int rc;
	mm_segment_t old_fs = get_fs();

	set_fs(KERNEL_DS);
	rc = zcrypt_send_cprb(xcrb);
	set_fs(old_fs);

	return rc;
}

/*
 * Generate (random) CCA AES DATA secure key.
 */
@@ -359,7 +341,7 @@ int cca_genseckey(u16 cardnr, u16 domain,
	prep_xcrb(&xcrb, cardnr, preqcblk, prepcblk);

	/* forward xcrb with request CPRB and reply CPRB to zcrypt dd */
	rc = _zcrypt_send_cprb(&xcrb);
	rc = zcrypt_send_cprb(&xcrb);
	if (rc) {
		DEBUG_ERR("%s zcrypt_send_cprb (cardnr=%d domain=%d) failed, errno %d\n",
			  __func__, (int) cardnr, (int) domain, rc);
@@ -497,7 +479,7 @@ int cca_clr2seckey(u16 cardnr, u16 domain, u32 keybitsize,
	prep_xcrb(&xcrb, cardnr, preqcblk, prepcblk);

	/* forward xcrb with request CPRB and reply CPRB to zcrypt dd */
	rc = _zcrypt_send_cprb(&xcrb);
	rc = zcrypt_send_cprb(&xcrb);
	if (rc) {
		DEBUG_ERR("%s zcrypt_send_cprb (cardnr=%d domain=%d) failed, rc=%d\n",
			  __func__, (int) cardnr, (int) domain, rc);
@@ -624,7 +606,7 @@ int cca_sec2protkey(u16 cardnr, u16 domain,
	prep_xcrb(&xcrb, cardnr, preqcblk, prepcblk);

	/* forward xcrb with request CPRB and reply CPRB to zcrypt dd */
	rc = _zcrypt_send_cprb(&xcrb);
	rc = zcrypt_send_cprb(&xcrb);
	if (rc) {
		DEBUG_ERR("%s zcrypt_send_cprb (cardnr=%d domain=%d) failed, rc=%d\n",
			  __func__, (int) cardnr, (int) domain, rc);
@@ -850,7 +832,7 @@ int cca_gencipherkey(u16 cardnr, u16 domain, u32 keybitsize, u32 keygenflags,
	prep_xcrb(&xcrb, cardnr, preqcblk, prepcblk);

	/* forward xcrb with request CPRB and reply CPRB to zcrypt dd */
	rc = _zcrypt_send_cprb(&xcrb);
	rc = zcrypt_send_cprb(&xcrb);
	if (rc) {
		DEBUG_ERR(
			"%s zcrypt_send_cprb (cardnr=%d domain=%d) failed, rc=%d\n",
@@ -1018,7 +1000,7 @@ static int _ip_cprb_helper(u16 cardnr, u16 domain,
	prep_xcrb(&xcrb, cardnr, preqcblk, prepcblk);

	/* forward xcrb with request CPRB and reply CPRB to zcrypt dd */
	rc = _zcrypt_send_cprb(&xcrb);
	rc = zcrypt_send_cprb(&xcrb);
	if (rc) {
		DEBUG_ERR(
			"%s zcrypt_send_cprb (cardnr=%d domain=%d) failed, rc=%d\n",
@@ -1235,7 +1217,7 @@ int cca_cipher2protkey(u16 cardnr, u16 domain, const u8 *ckey,
	prep_xcrb(&xcrb, cardnr, preqcblk, prepcblk);

	/* forward xcrb with request CPRB and reply CPRB to zcrypt dd */
	rc = _zcrypt_send_cprb(&xcrb);
	rc = zcrypt_send_cprb(&xcrb);
	if (rc) {
		DEBUG_ERR(
			"%s zcrypt_send_cprb (cardnr=%d domain=%d) failed, rc=%d\n",
@@ -1366,7 +1348,7 @@ int cca_query_crypto_facility(u16 cardnr, u16 domain,
	prep_xcrb(&xcrb, cardnr, preqcblk, prepcblk);

	/* forward xcrb with request CPRB and reply CPRB to zcrypt dd */
	rc = _zcrypt_send_cprb(&xcrb);
	rc = zcrypt_send_cprb(&xcrb);
	if (rc) {
		DEBUG_ERR("%s zcrypt_send_cprb (cardnr=%d domain=%d) failed, rc=%d\n",
			  __func__, (int) cardnr, (int) domain, rc);
+5 −23
Original line number Diff line number Diff line
@@ -169,24 +169,6 @@ int ep11_check_aeskeyblob(debug_info_t *dbg, int dbflvl,
}
EXPORT_SYMBOL(ep11_check_aeskeyblob);

/*
 * Helper function which calls zcrypt_send_ep11_cprb with
 * memory management segment adjusted to kernel space
 * so that the copy_from_user called within this
 * function do in fact copy from kernel space.
 */
static inline int _zcrypt_send_ep11_cprb(struct ep11_urb *urb)
{
	int rc;
	mm_segment_t old_fs = get_fs();

	set_fs(KERNEL_DS);
	rc = zcrypt_send_ep11_cprb(urb);
	set_fs(old_fs);

	return rc;
}

/*
 * Allocate and prepare ep11 cprb plus additional payload.
 */
@@ -399,7 +381,7 @@ static int ep11_query_info(u16 cardnr, u16 domain, u32 query_type,
		 req, sizeof(*req) + sizeof(*req_pl),
		 rep, sizeof(*rep) + sizeof(*rep_pl) + buflen);

	rc = _zcrypt_send_ep11_cprb(urb);
	rc = zcrypt_send_ep11_cprb(urb);
	if (rc) {
		DEBUG_ERR(
			"%s zcrypt_send_ep11_cprb(card=%d dom=%d) failed, rc=%d\n",
@@ -637,7 +619,7 @@ int ep11_genaeskey(u16 card, u16 domain, u32 keybitsize, u32 keygenflags,
		 req, sizeof(*req) + sizeof(*req_pl),
		 rep, sizeof(*rep) + sizeof(*rep_pl));

	rc = _zcrypt_send_ep11_cprb(urb);
	rc = zcrypt_send_ep11_cprb(urb);
	if (rc) {
		DEBUG_ERR(
			"%s zcrypt_send_ep11_cprb(card=%d dom=%d) failed, rc=%d\n",
@@ -757,7 +739,7 @@ static int ep11_cryptsingle(u16 card, u16 domain,
		 req, sizeof(*req) + req_pl_size,
		 rep, sizeof(*rep) + rep_pl_size);

	rc = _zcrypt_send_ep11_cprb(urb);
	rc = zcrypt_send_ep11_cprb(urb);
	if (rc) {
		DEBUG_ERR(
			"%s zcrypt_send_ep11_cprb(card=%d dom=%d) failed, rc=%d\n",
@@ -905,7 +887,7 @@ static int ep11_unwrapkey(u16 card, u16 domain,
		 req, sizeof(*req) + req_pl_size,
		 rep, sizeof(*rep) + sizeof(*rep_pl));

	rc = _zcrypt_send_ep11_cprb(urb);
	rc = zcrypt_send_ep11_cprb(urb);
	if (rc) {
		DEBUG_ERR(
			"%s zcrypt_send_ep11_cprb(card=%d dom=%d) failed, rc=%d\n",
@@ -1033,7 +1015,7 @@ static int ep11_wrapkey(u16 card, u16 domain,
		 req, sizeof(*req) + req_pl_size,
		 rep, sizeof(*rep) + sizeof(*rep_pl));

	rc = _zcrypt_send_ep11_cprb(urb);
	rc = zcrypt_send_ep11_cprb(urb);
	if (rc) {
		DEBUG_ERR(
			"%s zcrypt_send_ep11_cprb(card=%d dom=%d) failed, rc=%d\n",
+39 −39
Original line number Diff line number Diff line
@@ -388,7 +388,7 @@ struct type86_fmt2_msg {
	struct type86_fmt2_ext fmt2;
} __packed;

static int XCRB_msg_to_type6CPRB_msgX(struct ap_message *ap_msg,
static int XCRB_msg_to_type6CPRB_msgX(bool userspace, struct ap_message *ap_msg,
				      struct ica_xcRB *xcRB,
				      unsigned int *fcode,
				      unsigned short **dom)
@@ -465,7 +465,7 @@ static int XCRB_msg_to_type6CPRB_msgX(struct ap_message *ap_msg,
	msg->hdr.FromCardLen2 = xcRB->reply_data_length;

	/* prepare CPRB */
	if (copy_from_user(&(msg->cprbx), xcRB->request_control_blk_addr,
	if (z_copy_from_user(userspace, &(msg->cprbx), xcRB->request_control_blk_addr,
			     xcRB->request_control_blk_length))
		return -EFAULT;
	if (msg->cprbx.cprb_len + sizeof(msg->hdr.function_code) >
@@ -484,14 +484,14 @@ static int XCRB_msg_to_type6CPRB_msgX(struct ap_message *ap_msg,

	/* copy data block */
	if (xcRB->request_data_length &&
	    copy_from_user(req_data, xcRB->request_data_address,
	    z_copy_from_user(userspace, req_data, xcRB->request_data_address,
			     xcRB->request_data_length))
		return -EFAULT;

	return 0;
}

static int xcrb_msg_to_type6_ep11cprb_msgx(struct ap_message *ap_msg,
static int xcrb_msg_to_type6_ep11cprb_msgx(bool userspace, struct ap_message *ap_msg,
					   struct ep11_urb *xcRB,
					   unsigned int *fcode)
{
@@ -543,7 +543,7 @@ static int xcrb_msg_to_type6_ep11cprb_msgx(struct ap_message *ap_msg,
	msg->hdr.FromCardLen1 = xcRB->resp_len;

	/* Import CPRB data from the ioctl input parameter */
	if (copy_from_user(&(msg->cprbx.cprb_len),
	if (z_copy_from_user(userspace, &(msg->cprbx.cprb_len),
			     (char __force __user *)xcRB->req, xcRB->req_len)) {
		return -EFAULT;
	}
@@ -707,7 +707,7 @@ static int convert_type86_ica(struct zcrypt_queue *zq,
 *
 * Returns 0 on success or -EINVAL, -EFAULT, -EAGAIN in case of an error.
 */
static int convert_type86_xcrb(struct zcrypt_queue *zq,
static int convert_type86_xcrb(bool userspace, struct zcrypt_queue *zq,
			       struct ap_message *reply,
			       struct ica_xcRB *xcRB)
{
@@ -715,14 +715,14 @@ static int convert_type86_xcrb(struct zcrypt_queue *zq,
	char *data = reply->msg;

	/* Copy CPRB to user */
	if (copy_to_user(xcRB->reply_control_blk_addr,
	if (z_copy_to_user(userspace, xcRB->reply_control_blk_addr,
			   data + msg->fmt2.offset1, msg->fmt2.count1))
		return -EFAULT;
	xcRB->reply_control_blk_length = msg->fmt2.count1;

	/* Copy data buffer to user */
	if (msg->fmt2.count2)
		if (copy_to_user(xcRB->reply_data_addr,
		if (z_copy_to_user(userspace, xcRB->reply_data_addr,
				   data + msg->fmt2.offset2, msg->fmt2.count2))
			return -EFAULT;
	xcRB->reply_data_length = msg->fmt2.count2;
@@ -738,7 +738,7 @@ static int convert_type86_xcrb(struct zcrypt_queue *zq,
 *
 * Returns 0 on success or -EINVAL, -EFAULT, -EAGAIN in case of an error.
 */
static int convert_type86_ep11_xcrb(struct zcrypt_queue *zq,
static int convert_type86_ep11_xcrb(bool userspace, struct zcrypt_queue *zq,
				    struct ap_message *reply,
				    struct ep11_urb *xcRB)
{
@@ -749,7 +749,7 @@ static int convert_type86_ep11_xcrb(struct zcrypt_queue *zq,
		return -EINVAL;

	/* Copy response CPRB to user */
	if (copy_to_user((char __force __user *)xcRB->resp,
	if (z_copy_to_user(userspace, (char __force __user *)xcRB->resp,
			   data + msg->fmt2.offset1, msg->fmt2.count1))
		return -EFAULT;
	xcRB->resp_len = msg->fmt2.count1;
@@ -814,7 +814,7 @@ static int convert_response_ica(struct zcrypt_queue *zq,
	}
}

static int convert_response_xcrb(struct zcrypt_queue *zq,
static int convert_response_xcrb(bool userspace, struct zcrypt_queue *zq,
				 struct ap_message *reply,
				 struct ica_xcRB *xcRB)
{
@@ -831,7 +831,7 @@ static int convert_response_xcrb(struct zcrypt_queue *zq,
			return convert_error(zq, reply);
		}
		if (msg->cprbx.cprb_ver_id == 0x02)
			return convert_type86_xcrb(zq, reply, xcRB);
			return convert_type86_xcrb(userspace, zq, reply, xcRB);
		fallthrough;	/* wrong cprb version is an unknown response */
	default: /* Unknown response type, this should NEVER EVER happen */
		xcRB->status = 0x0008044DL; /* HDD_InvalidParm */
@@ -848,7 +848,7 @@ static int convert_response_xcrb(struct zcrypt_queue *zq,
	}
}

static int convert_response_ep11_xcrb(struct zcrypt_queue *zq,
static int convert_response_ep11_xcrb(bool userspace, struct zcrypt_queue *zq,
				      struct ap_message *reply, struct ep11_urb *xcRB)
{
	struct type86_ep11_reply *msg = reply->msg;
@@ -861,7 +861,7 @@ static int convert_response_ep11_xcrb(struct zcrypt_queue *zq,
		if (msg->hdr.reply_code)
			return convert_error(zq, reply);
		if (msg->cprbx.cprb_ver_id == 0x04)
			return convert_type86_ep11_xcrb(zq, reply, xcRB);
			return convert_type86_ep11_xcrb(userspace, zq, reply, xcRB);
		fallthrough;	/* wrong cprb version is an unknown resp */
	default: /* Unknown response type, this should NEVER EVER happen */
		zq->online = 0;
@@ -1095,7 +1095,7 @@ static long zcrypt_msgtype6_modexpo_crt(struct zcrypt_queue *zq,
 * by the caller with ap_init_message(). Also the caller has to
 * make sure ap_release_message() is always called even on failure.
 */
unsigned int get_cprb_fc(struct ica_xcRB *xcRB,
unsigned int get_cprb_fc(bool userspace, struct ica_xcRB *xcRB,
			 struct ap_message *ap_msg,
			 unsigned int *func_code, unsigned short **dom)
{
@@ -1112,7 +1112,7 @@ unsigned int get_cprb_fc(struct ica_xcRB *xcRB,
	ap_msg->private = kmemdup(&resp_type, sizeof(resp_type), GFP_KERNEL);
	if (!ap_msg->private)
		return -ENOMEM;
	return XCRB_msg_to_type6CPRB_msgX(ap_msg, xcRB, func_code, dom);
	return XCRB_msg_to_type6CPRB_msgX(userspace, ap_msg, xcRB, func_code, dom);
}

/**
@@ -1122,7 +1122,7 @@ unsigned int get_cprb_fc(struct ica_xcRB *xcRB,
 *	CEXxC device to the request distributor
 * @xcRB: pointer to the send_cprb request buffer
 */
static long zcrypt_msgtype6_send_cprb(struct zcrypt_queue *zq,
static long zcrypt_msgtype6_send_cprb(bool userspace, struct zcrypt_queue *zq,
				      struct ica_xcRB *xcRB,
				      struct ap_message *ap_msg)
{
@@ -1135,7 +1135,7 @@ static long zcrypt_msgtype6_send_cprb(struct zcrypt_queue *zq,
	if (rc == 0) {
		rc = ap_msg->rc;
		if (rc == 0)
			rc = convert_response_xcrb(zq, ap_msg, xcRB);
			rc = convert_response_xcrb(userspace, zq, ap_msg, xcRB);
	} else
		/* Signal pending. */
		ap_cancel_message(zq->queue, ap_msg);
@@ -1150,7 +1150,7 @@ static long zcrypt_msgtype6_send_cprb(struct zcrypt_queue *zq,
 * by the caller with ap_init_message(). Also the caller has to
 * make sure ap_release_message() is always called even on failure.
 */
unsigned int get_ep11cprb_fc(struct ep11_urb *xcrb,
unsigned int get_ep11cprb_fc(bool userspace, struct ep11_urb *xcrb,
			     struct ap_message *ap_msg,
			     unsigned int *func_code)
{
@@ -1167,7 +1167,7 @@ unsigned int get_ep11cprb_fc(struct ep11_urb *xcrb,
	ap_msg->private = kmemdup(&resp_type, sizeof(resp_type), GFP_KERNEL);
	if (!ap_msg->private)
		return -ENOMEM;
	return xcrb_msg_to_type6_ep11cprb_msgx(ap_msg, xcrb, func_code);
	return xcrb_msg_to_type6_ep11cprb_msgx(userspace, ap_msg, xcrb, func_code);
}

/**
@@ -1177,7 +1177,7 @@ unsigned int get_ep11cprb_fc(struct ep11_urb *xcrb,
 *	  CEX4P device to the request distributor
 * @xcRB: pointer to the ep11 user request block
 */
static long zcrypt_msgtype6_send_ep11_cprb(struct zcrypt_queue *zq,
static long zcrypt_msgtype6_send_ep11_cprb(bool userspace, struct zcrypt_queue *zq,
					   struct ep11_urb *xcrb,
					   struct ap_message *ap_msg)
{
@@ -1237,7 +1237,7 @@ static long zcrypt_msgtype6_send_ep11_cprb(struct zcrypt_queue *zq,
	if (rc == 0) {
		rc = ap_msg->rc;
		if (rc == 0)
			rc = convert_response_ep11_xcrb(zq, ap_msg, xcrb);
			rc = convert_response_ep11_xcrb(userspace, zq, ap_msg, xcrb);
	} else
		/* Signal pending. */
		ap_cancel_message(zq->queue, ap_msg);
Loading