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: Harald Freudenberger <freude@linux.ibm.com> Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
This commit is contained in:
		
							parent
							
								
									8f291ebf32
								
							
						
					
					
						commit
						a7367997ab
					
				| @ -161,17 +161,17 @@ struct ica_xcRB { | ||||
|  * @payload_len:	Payload length | ||||
|  */ | ||||
| struct ep11_cprb { | ||||
| 	__u16		cprb_len; | ||||
| 	unsigned char	cprb_ver_id; | ||||
| 	unsigned char	pad_000[2]; | ||||
| 	unsigned char	flags; | ||||
| 	unsigned char	func_id[2]; | ||||
| 	__u32		source_id; | ||||
| 	__u32		target_id; | ||||
| 	__u32		ret_code; | ||||
| 	__u32		reserved1; | ||||
| 	__u32		reserved2; | ||||
| 	__u32		payload_len; | ||||
| 	__u16	cprb_len; | ||||
| 	__u8	cprb_ver_id; | ||||
| 	__u8	pad_000[2]; | ||||
| 	__u8	flags; | ||||
| 	__u8	func_id[2]; | ||||
| 	__u32	source_id; | ||||
| 	__u32	target_id; | ||||
| 	__u32	ret_code; | ||||
| 	__u32	reserved1; | ||||
| 	__u32	reserved2; | ||||
| 	__u32	payload_len; | ||||
| } __attribute__((packed)); | ||||
| 
 | ||||
| /**
 | ||||
| @ -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)); | ||||
| 
 | ||||
| /**
 | ||||
|  | ||||
| @ -923,8 +923,8 @@ static bool is_desired_ep11_queue(unsigned int dev_qid, | ||||
| 	return false; | ||||
| } | ||||
| 
 | ||||
| static long zcrypt_send_ep11_cprb(struct ap_perms *perms, | ||||
| 				  struct ep11_urb *xcrb) | ||||
| static long _zcrypt_send_ep11_cprb(struct ap_perms *perms, | ||||
| 				   struct ep11_urb *xcrb) | ||||
| { | ||||
| 	struct zcrypt_card *zc, *pref_zc; | ||||
| 	struct zcrypt_queue *zq, *pref_zq; | ||||
| @ -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); | ||||
|  | ||||
| @ -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); | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user