Skip to content

Commit 80c20b2

Browse files
hfreudehcahca
authored andcommitted
s390/ap/zcrypt: New xflag parameter
Introduce a new flag parameter for the both cprb send functions zcrypt_send_cprb() and zcrypt_send_ep11_cprb(). This new xflags parameter ("execution flags") shall be used to provide execution hints and flags for this crypto request. There are two flags implemented to be used with these functions: * ZCRYPT_XFLAG_USERSPACE - indicates to the lower layers that all the ptrs address userspace. So when construction the ap msg copy_from_user() is to be used. If this flag is NOT set, the ptrs address kernel memory and thus memcpy() is to be used. * ZCRYPT_XFLAG_NOMEMALLOC - indicates that this task must not allocate memory which may be allocated with io operations. For the AP bus and zcrypt message layer this means: * The ZCRYPT_XFLAG_USERSPACE is mapped to the already existing bool variable "userspace" which is propagated to the zcrypt proto implementations. * The ZCRYPT_XFLAG_NOMEMALLOC results in setting the AP flag AP_MSG_FLAG_MEMPOOL when the AP msg buffer is initialized. Signed-off-by: Harald Freudenberger <freude@linux.ibm.com> Reviewed-by: Holger Dengler <dengler@linux.ibm.com> Link: https://lore.kernel.org/r/20250424133619.16495-6-freude@linux.ibm.com Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
1 parent f91bb85 commit 80c20b2

6 files changed

Lines changed: 52 additions & 38 deletions

File tree

drivers/s390/crypto/ap_bus.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -572,18 +572,18 @@ static void ap_poll_thread_stop(void)
572572
/*
573573
* ap_init_apmsg() - Initialize ap_message.
574574
*/
575-
int ap_init_apmsg(struct ap_message *ap_msg, bool use_mempool)
575+
int ap_init_apmsg(struct ap_message *ap_msg, u32 flags)
576576
{
577577
unsigned int maxmsgsize;
578578

579579
memset(ap_msg, 0, sizeof(*ap_msg));
580+
ap_msg->flags = flags;
580581

581-
if (use_mempool) {
582+
if (flags & AP_MSG_FLAG_MEMPOOL) {
582583
ap_msg->msg = mempool_alloc_preallocated(ap_msg_pool);
583584
if (!ap_msg->msg)
584585
return -ENOMEM;
585586
ap_msg->bufsize = AP_DEFAULT_MAX_MSG_SIZE;
586-
ap_msg->flags |= AP_MSG_FLAG_MEMPOOL;
587587
return 0;
588588
}
589589

drivers/s390/crypto/ap_bus.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -238,7 +238,7 @@ struct ap_message {
238238
#define AP_MSG_FLAG_ADMIN 0x0004 /* CCA, EP11: admin (=control) msg */
239239
#define AP_MSG_FLAG_MEMPOOL 0x0008 /* ap msg buffer allocated via mempool */
240240

241-
int ap_init_apmsg(struct ap_message *ap_msg, bool use_mempool);
241+
int ap_init_apmsg(struct ap_message *ap_msg, u32 flags);
242242
void ap_release_apmsg(struct ap_message *ap_msg);
243243

244244
enum ap_sm_wait ap_sm_event(struct ap_queue *aq, enum ap_sm_event event);

drivers/s390/crypto/zcrypt_api.c

Lines changed: 26 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -648,7 +648,7 @@ static long zcrypt_rsa_modexpo(struct ap_perms *perms,
648648

649649
trace_s390_zcrypt_req(mex, TP_ICARSAMODEXPO);
650650

651-
rc = ap_init_apmsg(&ap_msg, false);
651+
rc = ap_init_apmsg(&ap_msg, 0);
652652
if (rc)
653653
goto out;
654654

@@ -753,7 +753,7 @@ static long zcrypt_rsa_crt(struct ap_perms *perms,
753753

754754
trace_s390_zcrypt_req(crt, TP_ICARSACRT);
755755

756-
rc = ap_init_apmsg(&ap_msg, false);
756+
rc = ap_init_apmsg(&ap_msg, 0);
757757
if (rc)
758758
goto out;
759759

@@ -844,10 +844,11 @@ static long zcrypt_rsa_crt(struct ap_perms *perms,
844844
return rc;
845845
}
846846

847-
static long _zcrypt_send_cprb(bool userspace, struct ap_perms *perms,
847+
static long _zcrypt_send_cprb(u32 xflags, struct ap_perms *perms,
848848
struct zcrypt_track *tr,
849849
struct ica_xcRB *xcrb)
850850
{
851+
bool userspace = xflags & ZCRYPT_XFLAG_USERSPACE;
851852
struct zcrypt_card *zc, *pref_zc;
852853
struct zcrypt_queue *zq, *pref_zq;
853854
struct ap_message ap_msg;
@@ -861,7 +862,8 @@ static long _zcrypt_send_cprb(bool userspace, struct ap_perms *perms,
861862

862863
xcrb->status = 0;
863864

864-
rc = ap_init_apmsg(&ap_msg, false);
865+
rc = ap_init_apmsg(&ap_msg, xflags & ZCRYPT_XFLAG_NOMEMALLOC ?
866+
AP_MSG_FLAG_MEMPOOL : 0);
865867
if (rc)
866868
goto out;
867869

@@ -977,21 +979,21 @@ static long _zcrypt_send_cprb(bool userspace, struct ap_perms *perms,
977979
return rc;
978980
}
979981

980-
long zcrypt_send_cprb(struct ica_xcRB *xcrb)
982+
long zcrypt_send_cprb(struct ica_xcRB *xcrb, u32 xflags)
981983
{
982984
struct zcrypt_track tr;
983985
int rc;
984986

985987
memset(&tr, 0, sizeof(tr));
986988

987989
do {
988-
rc = _zcrypt_send_cprb(false, &ap_perms, &tr, xcrb);
990+
rc = _zcrypt_send_cprb(xflags, &ap_perms, &tr, xcrb);
989991
} while (rc == -EAGAIN && ++tr.again_counter < TRACK_AGAIN_MAX);
990992

991993
/* on ENODEV failure: retry once again after a requested rescan */
992994
if (rc == -ENODEV && zcrypt_process_rescan())
993995
do {
994-
rc = _zcrypt_send_cprb(false, &ap_perms, &tr, xcrb);
996+
rc = _zcrypt_send_cprb(xflags, &ap_perms, &tr, xcrb);
995997
} while (rc == -EAGAIN && ++tr.again_counter < TRACK_AGAIN_MAX);
996998
if (rc == -EAGAIN && tr.again_counter >= TRACK_AGAIN_MAX)
997999
rc = -EIO;
@@ -1029,10 +1031,11 @@ static bool is_desired_ep11_queue(unsigned int dev_qid,
10291031
return false;
10301032
}
10311033

1032-
static long _zcrypt_send_ep11_cprb(bool userspace, struct ap_perms *perms,
1034+
static long _zcrypt_send_ep11_cprb(u32 xflags, struct ap_perms *perms,
10331035
struct zcrypt_track *tr,
10341036
struct ep11_urb *xcrb)
10351037
{
1038+
bool userspace = xflags & ZCRYPT_XFLAG_USERSPACE;
10361039
struct zcrypt_card *zc, *pref_zc;
10371040
struct zcrypt_queue *zq, *pref_zq;
10381041
struct ep11_target_dev *targets = NULL;
@@ -1045,7 +1048,8 @@ static long _zcrypt_send_ep11_cprb(bool userspace, struct ap_perms *perms,
10451048

10461049
trace_s390_zcrypt_req(xcrb, TP_ZSENDEP11CPRB);
10471050

1048-
rc = ap_init_apmsg(&ap_msg, false);
1051+
rc = ap_init_apmsg(&ap_msg, xflags & ZCRYPT_XFLAG_NOMEMALLOC ?
1052+
AP_MSG_FLAG_MEMPOOL : 0);
10491053
if (rc)
10501054
goto out;
10511055

@@ -1177,21 +1181,21 @@ static long _zcrypt_send_ep11_cprb(bool userspace, struct ap_perms *perms,
11771181
return rc;
11781182
}
11791183

1180-
long zcrypt_send_ep11_cprb(struct ep11_urb *xcrb)
1184+
long zcrypt_send_ep11_cprb(struct ep11_urb *xcrb, u32 xflags)
11811185
{
11821186
struct zcrypt_track tr;
11831187
int rc;
11841188

11851189
memset(&tr, 0, sizeof(tr));
11861190

11871191
do {
1188-
rc = _zcrypt_send_ep11_cprb(false, &ap_perms, &tr, xcrb);
1192+
rc = _zcrypt_send_ep11_cprb(xflags, &ap_perms, &tr, xcrb);
11891193
} while (rc == -EAGAIN && ++tr.again_counter < TRACK_AGAIN_MAX);
11901194

11911195
/* on ENODEV failure: retry once again after a requested rescan */
11921196
if (rc == -ENODEV && zcrypt_process_rescan())
11931197
do {
1194-
rc = _zcrypt_send_ep11_cprb(false, &ap_perms, &tr, xcrb);
1198+
rc = _zcrypt_send_ep11_cprb(xflags, &ap_perms, &tr, xcrb);
11951199
} while (rc == -EAGAIN && ++tr.again_counter < TRACK_AGAIN_MAX);
11961200
if (rc == -EAGAIN && tr.again_counter >= TRACK_AGAIN_MAX)
11971201
rc = -EIO;
@@ -1215,7 +1219,7 @@ static long zcrypt_rng(char *buffer)
12151219

12161220
trace_s390_zcrypt_req(buffer, TP_HWRNGCPRB);
12171221

1218-
rc = ap_init_apmsg(&ap_msg, false);
1222+
rc = ap_init_apmsg(&ap_msg, 0);
12191223
if (rc)
12201224
goto out;
12211225
rc = prep_rng_ap_msg(&ap_msg, &func_code, &domain);
@@ -1528,20 +1532,21 @@ static int zsecsendcprb_ioctl(struct ap_perms *perms, unsigned long arg)
15281532
int rc;
15291533
struct ica_xcRB xcrb;
15301534
struct zcrypt_track tr;
1535+
u32 xflags = ZCRYPT_XFLAG_USERSPACE;
15311536
struct ica_xcRB __user *uxcrb = (void __user *)arg;
15321537

15331538
memset(&tr, 0, sizeof(tr));
15341539
if (copy_from_user(&xcrb, uxcrb, sizeof(xcrb)))
15351540
return -EFAULT;
15361541

15371542
do {
1538-
rc = _zcrypt_send_cprb(true, perms, &tr, &xcrb);
1543+
rc = _zcrypt_send_cprb(xflags, perms, &tr, &xcrb);
15391544
} while (rc == -EAGAIN && ++tr.again_counter < TRACK_AGAIN_MAX);
15401545

15411546
/* on ENODEV failure: retry once again after a requested rescan */
15421547
if (rc == -ENODEV && zcrypt_process_rescan())
15431548
do {
1544-
rc = _zcrypt_send_cprb(true, perms, &tr, &xcrb);
1549+
rc = _zcrypt_send_cprb(xflags, perms, &tr, &xcrb);
15451550
} while (rc == -EAGAIN && ++tr.again_counter < TRACK_AGAIN_MAX);
15461551
if (rc == -EAGAIN && tr.again_counter >= TRACK_AGAIN_MAX)
15471552
rc = -EIO;
@@ -1558,20 +1563,21 @@ static int zsendep11cprb_ioctl(struct ap_perms *perms, unsigned long arg)
15581563
int rc;
15591564
struct ep11_urb xcrb;
15601565
struct zcrypt_track tr;
1566+
u32 xflags = ZCRYPT_XFLAG_USERSPACE;
15611567
struct ep11_urb __user *uxcrb = (void __user *)arg;
15621568

15631569
memset(&tr, 0, sizeof(tr));
15641570
if (copy_from_user(&xcrb, uxcrb, sizeof(xcrb)))
15651571
return -EFAULT;
15661572

15671573
do {
1568-
rc = _zcrypt_send_ep11_cprb(true, perms, &tr, &xcrb);
1574+
rc = _zcrypt_send_ep11_cprb(xflags, perms, &tr, &xcrb);
15691575
} while (rc == -EAGAIN && ++tr.again_counter < TRACK_AGAIN_MAX);
15701576

15711577
/* on ENODEV failure: retry once again after a requested rescan */
15721578
if (rc == -ENODEV && zcrypt_process_rescan())
15731579
do {
1574-
rc = _zcrypt_send_ep11_cprb(true, perms, &tr, &xcrb);
1580+
rc = _zcrypt_send_ep11_cprb(xflags, perms, &tr, &xcrb);
15751581
} while (rc == -EAGAIN && ++tr.again_counter < TRACK_AGAIN_MAX);
15761582
if (rc == -EAGAIN && tr.again_counter >= TRACK_AGAIN_MAX)
15771583
rc = -EIO;
@@ -1832,6 +1838,7 @@ static long trans_xcrb32(struct ap_perms *perms, struct file *filp,
18321838
unsigned int cmd, unsigned long arg)
18331839
{
18341840
struct compat_ica_xcrb __user *uxcrb32 = compat_ptr(arg);
1841+
u32 xflags = ZCRYPT_XFLAG_USERSPACE;
18351842
struct compat_ica_xcrb xcrb32;
18361843
struct zcrypt_track tr;
18371844
struct ica_xcRB xcrb64;
@@ -1861,13 +1868,13 @@ static long trans_xcrb32(struct ap_perms *perms, struct file *filp,
18611868
xcrb64.priority_window = xcrb32.priority_window;
18621869
xcrb64.status = xcrb32.status;
18631870
do {
1864-
rc = _zcrypt_send_cprb(true, perms, &tr, &xcrb64);
1871+
rc = _zcrypt_send_cprb(xflags, perms, &tr, &xcrb64);
18651872
} while (rc == -EAGAIN && ++tr.again_counter < TRACK_AGAIN_MAX);
18661873

18671874
/* on ENODEV failure: retry once again after a requested rescan */
18681875
if (rc == -ENODEV && zcrypt_process_rescan())
18691876
do {
1870-
rc = _zcrypt_send_cprb(true, perms, &tr, &xcrb64);
1877+
rc = _zcrypt_send_cprb(xflags, perms, &tr, &xcrb64);
18711878
} while (rc == -EAGAIN && ++tr.again_counter < TRACK_AGAIN_MAX);
18721879
if (rc == -EAGAIN && tr.again_counter >= TRACK_AGAIN_MAX)
18731880
rc = -EIO;

drivers/s390/crypto/zcrypt_api.h

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,13 @@ struct zcrypt_track {
7676
#define TRACK_AGAIN_CARD_WEIGHT_PENALTY 1000
7777
#define TRACK_AGAIN_QUEUE_WEIGHT_PENALTY 10000
7878

79+
/*
80+
* xflags - to be used with zcrypt_send_cprb() and
81+
* zcrypt_send_ep11_cprb() for the xflags parameter.
82+
*/
83+
#define ZCRYPT_XFLAG_USERSPACE 0x0001 /* data ptrs address userspace */
84+
#define ZCRYPT_XFLAG_NOMEMALLOC 0x0002 /* do not allocate memory via kmalloc */
85+
7986
struct zcrypt_ops {
8087
long (*rsa_modexpo)(struct zcrypt_queue *, struct ica_rsa_modexpo *,
8188
struct ap_message *);
@@ -161,8 +168,8 @@ void zcrypt_msgtype_unregister(struct zcrypt_ops *);
161168
struct zcrypt_ops *zcrypt_msgtype(unsigned char *, int);
162169
int zcrypt_api_init(void);
163170
void zcrypt_api_exit(void);
164-
long zcrypt_send_cprb(struct ica_xcRB *xcRB);
165-
long zcrypt_send_ep11_cprb(struct ep11_urb *urb);
171+
long zcrypt_send_cprb(struct ica_xcRB *xcRB, u32 xflags);
172+
long zcrypt_send_ep11_cprb(struct ep11_urb *urb, u32 xflags);
166173
void zcrypt_device_status_mask_ext(struct zcrypt_device_status_ext *devstatus);
167174
int zcrypt_device_status_ext(int card, int queue,
168175
struct zcrypt_device_status_ext *devstatus);

drivers/s390/crypto/zcrypt_ccamisc.c

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -379,7 +379,7 @@ int cca_genseckey(u16 cardnr, u16 domain,
379379
prep_xcrb(&xcrb, cardnr, preqcblk, prepcblk);
380380

381381
/* forward xcrb with request CPRB and reply CPRB to zcrypt dd */
382-
rc = zcrypt_send_cprb(&xcrb);
382+
rc = zcrypt_send_cprb(&xcrb, 0);
383383
if (rc) {
384384
ZCRYPT_DBF_ERR("%s zcrypt_send_cprb (cardnr=%d domain=%d) failed, errno %d\n",
385385
__func__, (int)cardnr, (int)domain, rc);
@@ -517,7 +517,7 @@ int cca_clr2seckey(u16 cardnr, u16 domain, u32 keybitsize,
517517
prep_xcrb(&xcrb, cardnr, preqcblk, prepcblk);
518518

519519
/* forward xcrb with request CPRB and reply CPRB to zcrypt dd */
520-
rc = zcrypt_send_cprb(&xcrb);
520+
rc = zcrypt_send_cprb(&xcrb, 0);
521521
if (rc) {
522522
ZCRYPT_DBF_ERR("%s zcrypt_send_cprb (cardnr=%d domain=%d) failed, rc=%d\n",
523523
__func__, (int)cardnr, (int)domain, rc);
@@ -644,7 +644,7 @@ int cca_sec2protkey(u16 cardnr, u16 domain,
644644
prep_xcrb(&xcrb, cardnr, preqcblk, prepcblk);
645645

646646
/* forward xcrb with request CPRB and reply CPRB to zcrypt dd */
647-
rc = zcrypt_send_cprb(&xcrb);
647+
rc = zcrypt_send_cprb(&xcrb, 0);
648648
if (rc) {
649649
ZCRYPT_DBF_ERR("%s zcrypt_send_cprb (cardnr=%d domain=%d) failed, rc=%d\n",
650650
__func__, (int)cardnr, (int)domain, rc);
@@ -872,7 +872,7 @@ int cca_gencipherkey(u16 cardnr, u16 domain, u32 keybitsize, u32 keygenflags,
872872
prep_xcrb(&xcrb, cardnr, preqcblk, prepcblk);
873873

874874
/* forward xcrb with request CPRB and reply CPRB to zcrypt dd */
875-
rc = zcrypt_send_cprb(&xcrb);
875+
rc = zcrypt_send_cprb(&xcrb, 0);
876876
if (rc) {
877877
ZCRYPT_DBF_ERR("%s zcrypt_send_cprb (cardnr=%d domain=%d) failed, rc=%d\n",
878878
__func__, (int)cardnr, (int)domain, rc);
@@ -1038,7 +1038,7 @@ static int _ip_cprb_helper(u16 cardnr, u16 domain,
10381038
prep_xcrb(&xcrb, cardnr, preqcblk, prepcblk);
10391039

10401040
/* forward xcrb with request CPRB and reply CPRB to zcrypt dd */
1041-
rc = zcrypt_send_cprb(&xcrb);
1041+
rc = zcrypt_send_cprb(&xcrb, 0);
10421042
if (rc) {
10431043
ZCRYPT_DBF_ERR("%s zcrypt_send_cprb (cardnr=%d domain=%d) failed, rc=%d\n",
10441044
__func__, (int)cardnr, (int)domain, rc);
@@ -1249,7 +1249,7 @@ int cca_cipher2protkey(u16 cardnr, u16 domain, const u8 *ckey,
12491249
prep_xcrb(&xcrb, cardnr, preqcblk, prepcblk);
12501250

12511251
/* forward xcrb with request CPRB and reply CPRB to zcrypt dd */
1252-
rc = zcrypt_send_cprb(&xcrb);
1252+
rc = zcrypt_send_cprb(&xcrb, 0);
12531253
if (rc) {
12541254
ZCRYPT_DBF_ERR("%s zcrypt_send_cprb (cardnr=%d domain=%d) failed, rc=%d\n",
12551255
__func__, (int)cardnr, (int)domain, rc);
@@ -1412,7 +1412,7 @@ int cca_ecc2protkey(u16 cardnr, u16 domain, const u8 *key,
14121412
prep_xcrb(&xcrb, cardnr, preqcblk, prepcblk);
14131413

14141414
/* forward xcrb with request CPRB and reply CPRB to zcrypt dd */
1415-
rc = zcrypt_send_cprb(&xcrb);
1415+
rc = zcrypt_send_cprb(&xcrb, 0);
14161416
if (rc) {
14171417
ZCRYPT_DBF_ERR("%s zcrypt_send_cprb (cardnr=%d domain=%d) failed, rc=%d\n",
14181418
__func__, (int)cardnr, (int)domain, rc);
@@ -1526,7 +1526,7 @@ int cca_query_crypto_facility(u16 cardnr, u16 domain,
15261526
prep_xcrb(&xcrb, cardnr, preqcblk, prepcblk);
15271527

15281528
/* forward xcrb with request CPRB and reply CPRB to zcrypt dd */
1529-
rc = zcrypt_send_cprb(&xcrb);
1529+
rc = zcrypt_send_cprb(&xcrb, 0);
15301530
if (rc) {
15311531
ZCRYPT_DBF_ERR("%s zcrypt_send_cprb (cardnr=%d domain=%d) failed, rc=%d\n",
15321532
__func__, (int)cardnr, (int)domain, rc);

drivers/s390/crypto/zcrypt_ep11misc.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -636,7 +636,7 @@ static int ep11_query_info(u16 cardnr, u16 domain, u32 query_type,
636636
req, sizeof(*req) + sizeof(*req_pl),
637637
rep, sizeof(*rep) + sizeof(*rep_pl) + buflen);
638638

639-
rc = zcrypt_send_ep11_cprb(urb);
639+
rc = zcrypt_send_ep11_cprb(urb, 0);
640640
if (rc) {
641641
ZCRYPT_DBF_ERR("%s zcrypt_send_ep11_cprb(card=%d dom=%d) failed, rc=%d\n",
642642
__func__, (int)cardnr, (int)domain, rc);
@@ -892,7 +892,7 @@ static int _ep11_genaeskey(u16 card, u16 domain,
892892
req, sizeof(*req) + req_pl_size,
893893
rep, sizeof(*rep) + sizeof(*rep_pl));
894894

895-
rc = zcrypt_send_ep11_cprb(urb);
895+
rc = zcrypt_send_ep11_cprb(urb, 0);
896896
if (rc) {
897897
ZCRYPT_DBF_ERR("%s zcrypt_send_ep11_cprb(card=%d dom=%d) failed, rc=%d\n",
898898
__func__, (int)card, (int)domain, rc);
@@ -1049,7 +1049,7 @@ static int ep11_cryptsingle(u16 card, u16 domain,
10491049
req, sizeof(*req) + req_pl_size,
10501050
rep, sizeof(*rep) + rep_pl_size);
10511051

1052-
rc = zcrypt_send_ep11_cprb(urb);
1052+
rc = zcrypt_send_ep11_cprb(urb, 0);
10531053
if (rc) {
10541054
ZCRYPT_DBF_ERR("%s zcrypt_send_ep11_cprb(card=%d dom=%d) failed, rc=%d\n",
10551055
__func__, (int)card, (int)domain, rc);
@@ -1212,7 +1212,7 @@ static int _ep11_unwrapkey(u16 card, u16 domain,
12121212
req, sizeof(*req) + req_pl_size,
12131213
rep, sizeof(*rep) + sizeof(*rep_pl));
12141214

1215-
rc = zcrypt_send_ep11_cprb(urb);
1215+
rc = zcrypt_send_ep11_cprb(urb, 0);
12161216
if (rc) {
12171217
ZCRYPT_DBF_ERR("%s zcrypt_send_ep11_cprb(card=%d dom=%d) failed, rc=%d\n",
12181218
__func__, (int)card, (int)domain, rc);
@@ -1372,7 +1372,7 @@ static int _ep11_wrapkey(u16 card, u16 domain,
13721372
req, sizeof(*req) + req_pl_size,
13731373
rep, sizeof(*rep) + sizeof(*rep_pl));
13741374

1375-
rc = zcrypt_send_ep11_cprb(urb);
1375+
rc = zcrypt_send_ep11_cprb(urb, 0);
13761376
if (rc) {
13771377
ZCRYPT_DBF_ERR("%s zcrypt_send_ep11_cprb(card=%d dom=%d) failed, rc=%d\n",
13781378
__func__, (int)card, (int)domain, rc);

0 commit comments

Comments
 (0)