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
|
* @payload_len: Payload length
|
||||||
*/
|
*/
|
||||||
struct ep11_cprb {
|
struct ep11_cprb {
|
||||||
__u16 cprb_len;
|
__u16 cprb_len;
|
||||||
unsigned char cprb_ver_id;
|
__u8 cprb_ver_id;
|
||||||
unsigned char pad_000[2];
|
__u8 pad_000[2];
|
||||||
unsigned char flags;
|
__u8 flags;
|
||||||
unsigned char func_id[2];
|
__u8 func_id[2];
|
||||||
__u32 source_id;
|
__u32 source_id;
|
||||||
__u32 target_id;
|
__u32 target_id;
|
||||||
__u32 ret_code;
|
__u32 ret_code;
|
||||||
__u32 reserved1;
|
__u32 reserved1;
|
||||||
__u32 reserved2;
|
__u32 reserved2;
|
||||||
__u32 payload_len;
|
__u32 payload_len;
|
||||||
} __attribute__((packed));
|
} __attribute__((packed));
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -197,13 +197,13 @@ struct ep11_target_dev {
|
||||||
*/
|
*/
|
||||||
struct ep11_urb {
|
struct ep11_urb {
|
||||||
__u16 targets_num;
|
__u16 targets_num;
|
||||||
__u64 targets;
|
__u8 __user *targets;
|
||||||
__u64 weight;
|
__u64 weight;
|
||||||
__u64 req_no;
|
__u64 req_no;
|
||||||
__u64 req_len;
|
__u64 req_len;
|
||||||
__u64 req;
|
__u8 __user *req;
|
||||||
__u64 resp_len;
|
__u64 resp_len;
|
||||||
__u64 resp;
|
__u8 __user *resp;
|
||||||
} __attribute__((packed));
|
} __attribute__((packed));
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -923,8 +923,8 @@ static bool is_desired_ep11_queue(unsigned int dev_qid,
|
||||||
return false;
|
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 ep11_urb *xcrb)
|
||||||
{
|
{
|
||||||
struct zcrypt_card *zc, *pref_zc;
|
struct zcrypt_card *zc, *pref_zc;
|
||||||
struct zcrypt_queue *zq, *pref_zq;
|
struct zcrypt_queue *zq, *pref_zq;
|
||||||
|
@ -1029,6 +1029,12 @@ out:
|
||||||
return rc;
|
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)
|
static long zcrypt_rng(char *buffer)
|
||||||
{
|
{
|
||||||
struct zcrypt_card *zc, *pref_zc;
|
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)))
|
if (copy_from_user(&xcrb, uxcrb, sizeof(xcrb)))
|
||||||
return -EFAULT;
|
return -EFAULT;
|
||||||
do {
|
do {
|
||||||
rc = zcrypt_send_ep11_cprb(perms, &xcrb);
|
rc = _zcrypt_send_ep11_cprb(perms, &xcrb);
|
||||||
} while (rc == -EAGAIN);
|
} while (rc == -EAGAIN);
|
||||||
/* on failure: retry once again after a requested rescan */
|
/* on failure: retry once again after a requested rescan */
|
||||||
if ((rc == -ENODEV) && (zcrypt_process_rescan()))
|
if ((rc == -ENODEV) && (zcrypt_process_rescan()))
|
||||||
do {
|
do {
|
||||||
rc = zcrypt_send_ep11_cprb(perms, &xcrb);
|
rc = _zcrypt_send_ep11_cprb(perms, &xcrb);
|
||||||
} while (rc == -EAGAIN);
|
} while (rc == -EAGAIN);
|
||||||
if (rc)
|
if (rc)
|
||||||
ZCRYPT_DBF(DBF_DEBUG, "ioctl ZSENDEP11CPRB rc=%d\n", 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);
|
int zcrypt_api_init(void);
|
||||||
void zcrypt_api_exit(void);
|
void zcrypt_api_exit(void);
|
||||||
long zcrypt_send_cprb(struct ica_xcRB *xcRB);
|
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);
|
void zcrypt_device_status_mask_ext(struct zcrypt_device_status_ext *devstatus);
|
||||||
int zcrypt_device_status_ext(int card, int queue,
|
int zcrypt_device_status_ext(int card, int queue,
|
||||||
struct zcrypt_device_status_ext *devstatus);
|
struct zcrypt_device_status_ext *devstatus);
|
||||||
|
|
Loading…
Reference in a new issue