Skip to content

Commit 3b42877

Browse files
hfreudeVasily Gorbik
authored andcommitted
s390/zcrypt: rework arrays with length zero occurrences
Review and rework all the zero length array occurrences within structs to flexible array fields or comment if not used at all. However, some struct fields are there for documentation purpose or to have correct sizeof() evaluation of a struct and thus should not get deleted. Signed-off-by: Harald Freudenberger <freude@linux.ibm.com> Acked-by: Heiko Carstens <hca@linux.ibm.com> Reviewed-by: Holger Dengler <dengler@linux.ibm.com> Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
1 parent e20985a commit 3b42877

4 files changed

Lines changed: 40 additions & 42 deletions

File tree

drivers/s390/crypto/zcrypt_cca_key.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,7 @@ static inline int zcrypt_type6_crt_key(struct ica_rsa_modexpo_crt *crt, void *p)
168168
struct t6_keyblock_hdr t6_hdr;
169169
struct cca_token_hdr token;
170170
struct cca_pvt_ext_crt_sec pvt;
171-
char key_parts[0];
171+
char key_parts[];
172172
} __packed *key = p;
173173
struct cca_public_sec *pub;
174174
int short_len, long_len, pad_len, key_len, size;

drivers/s390/crypto/zcrypt_ccamisc.c

Lines changed: 36 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -450,18 +450,18 @@ int cca_clr2seckey(u16 cardnr, u16 domain, u32 keybitsize,
450450
char rule_array[8];
451451
struct lv1 {
452452
u16 len;
453-
u8 clrkey[0];
453+
u8 clrkey[];
454454
} lv1;
455-
struct lv2 {
456-
u16 len;
457-
struct keyid {
458-
u16 len;
459-
u16 attr;
460-
u8 data[SECKEYBLOBSIZE];
461-
} keyid;
462-
} lv2;
455+
/* followed by struct lv2 */
463456
} __packed * preqparm;
464-
struct lv2 *plv2;
457+
struct lv2 {
458+
u16 len;
459+
struct keyid {
460+
u16 len;
461+
u16 attr;
462+
u8 data[SECKEYBLOBSIZE];
463+
} keyid;
464+
} __packed * plv2;
465465
struct cmrepparm {
466466
u8 subfunc_code[2];
467467
u16 rule_array_len;
@@ -512,11 +512,11 @@ int cca_clr2seckey(u16 cardnr, u16 domain, u32 keybitsize,
512512
}
513513
preqparm->lv1.len = sizeof(struct lv1) + keysize;
514514
memcpy(preqparm->lv1.clrkey, clrkey, keysize);
515-
plv2 = (struct lv2 *)(((u8 *)&preqparm->lv2) + keysize);
515+
plv2 = (struct lv2 *)(((u8 *)preqparm) + sizeof(*preqparm) + keysize);
516516
plv2->len = sizeof(struct lv2);
517517
plv2->keyid.len = sizeof(struct keyid);
518518
plv2->keyid.attr = 0x30;
519-
preqcblk->req_parml = sizeof(struct cmreqparm) + keysize;
519+
preqcblk->req_parml = sizeof(*preqparm) + keysize + sizeof(*plv2);
520520

521521
/* fill xcrb struct */
522522
prep_xcrb(&xcrb, cardnr, preqcblk, prepcblk);
@@ -761,22 +761,22 @@ int cca_gencipherkey(u16 cardnr, u16 domain, u32 keybitsize, u32 keygenflags,
761761
u16 key_name_2_len;
762762
u16 user_data_1_len;
763763
u16 user_data_2_len;
764-
u8 key_name_1[0];
765-
u8 key_name_2[0];
766-
u8 user_data_1[0];
767-
u8 user_data_2[0];
764+
/* u8 key_name_1[]; */
765+
/* u8 key_name_2[]; */
766+
/* u8 user_data_1[]; */
767+
/* u8 user_data_2[]; */
768768
} vud;
769769
struct {
770770
u16 len;
771771
struct {
772772
u16 len;
773773
u16 flag;
774-
u8 kek_id_1[0];
774+
/* u8 kek_id_1[]; */
775775
} tlv1;
776776
struct {
777777
u16 len;
778778
u16 flag;
779-
u8 kek_id_2[0];
779+
/* u8 kek_id_2[]; */
780780
} tlv2;
781781
struct {
782782
u16 len;
@@ -786,17 +786,17 @@ int cca_gencipherkey(u16 cardnr, u16 domain, u32 keybitsize, u32 keygenflags,
786786
struct {
787787
u16 len;
788788
u16 flag;
789-
u8 gen_key_id_1_label[0];
789+
/* u8 gen_key_id_1_label[]; */
790790
} tlv4;
791791
struct {
792792
u16 len;
793793
u16 flag;
794-
u8 gen_key_id_2[0];
794+
/* u8 gen_key_id_2[]; */
795795
} tlv5;
796796
struct {
797797
u16 len;
798798
u16 flag;
799-
u8 gen_key_id_2_label[0];
799+
/* u8 gen_key_id_2_label[]; */
800800
} tlv6;
801801
} kb;
802802
} __packed * preqparm;
@@ -811,7 +811,7 @@ int cca_gencipherkey(u16 cardnr, u16 domain, u32 keybitsize, u32 keygenflags,
811811
struct {
812812
u16 len;
813813
u16 flag;
814-
u8 gen_key[0]; /* 120-136 bytes */
814+
u8 gen_key[]; /* 120-136 bytes */
815815
} tlv1;
816816
} kb;
817817
} __packed * prepparm;
@@ -955,7 +955,7 @@ static int _ip_cprb_helper(u16 cardnr, u16 domain,
955955
struct rule_array_block {
956956
u8 subfunc_code[2];
957957
u16 rule_array_len;
958-
char rule_array[0];
958+
char rule_array[];
959959
} __packed * preq_ra_block;
960960
struct vud_block {
961961
u16 len;
@@ -967,15 +967,15 @@ static int _ip_cprb_helper(u16 cardnr, u16 domain,
967967
struct {
968968
u16 len;
969969
u16 flag; /* 0x0063 */
970-
u8 clr_key[0]; /* clear key value bytes */
970+
u8 clr_key[]; /* clear key value bytes */
971971
} tlv2;
972972
} __packed * preq_vud_block;
973973
struct key_block {
974974
u16 len;
975975
struct {
976976
u16 len;
977977
u16 flag; /* 0x0030 */
978-
u8 key_token[0]; /* key skeleton */
978+
u8 key_token[]; /* key skeleton */
979979
} tlv1;
980980
} __packed * preq_key_block;
981981
struct iprepparm {
@@ -989,7 +989,7 @@ static int _ip_cprb_helper(u16 cardnr, u16 domain,
989989
struct {
990990
u16 len;
991991
u16 flag; /* 0x0030 */
992-
u8 key_token[0]; /* key token */
992+
u8 key_token[]; /* key token */
993993
} tlv1;
994994
} kb;
995995
} __packed * prepparm;
@@ -1201,7 +1201,7 @@ int cca_cipher2protkey(u16 cardnr, u16 domain, const u8 *ckey,
12011201
u16 len;
12021202
u16 cca_key_token_len;
12031203
u16 cca_key_token_flags;
1204-
u8 cca_key_token[0]; // 64 or more
1204+
u8 cca_key_token[]; /* 64 or more */
12051205
} kb;
12061206
} __packed * preqparm;
12071207
struct aurepparm {
@@ -1370,7 +1370,7 @@ int cca_ecc2protkey(u16 cardnr, u16 domain, const u8 *key,
13701370
u16 len;
13711371
u16 cca_key_token_len;
13721372
u16 cca_key_token_flags;
1373-
u8 cca_key_token[0];
1373+
u8 cca_key_token[];
13741374
} kb;
13751375
} __packed * preqparm;
13761376
struct aurepparm {
@@ -1387,17 +1387,15 @@ int cca_ecc2protkey(u16 cardnr, u16 domain, const u8 *key,
13871387
u8 form;
13881388
u8 pad1[3];
13891389
u16 keylen;
1390-
u8 key[0]; /* the key (keylen bytes) */
1391-
u16 keyattrlen;
1392-
u8 keyattr[32];
1393-
u8 pad2[1];
1394-
u8 vptype;
1395-
u8 vp[32]; /* verification pattern */
1390+
u8 key[]; /* the key (keylen bytes) */
1391+
/* u16 keyattrlen; */
1392+
/* u8 keyattr[32]; */
1393+
/* u8 pad2[1]; */
1394+
/* u8 vptype; */
1395+
/* u8 vp[32]; verification pattern */
13961396
} ckb;
13971397
} vud;
1398-
struct {
1399-
u16 len;
1400-
} kb;
1398+
/* followed by a key block */
14011399
} __packed * prepparm;
14021400
int keylen = ((struct eccprivkeytoken *)key)->len;
14031401

@@ -1525,7 +1523,7 @@ int cca_query_crypto_facility(u16 cardnr, u16 domain,
15251523
size_t parmbsize = sizeof(struct fqreqparm);
15261524
struct fqrepparm {
15271525
u8 subfunc_code[2];
1528-
u8 lvdata[0];
1526+
u8 lvdata[];
15291527
} __packed * prepparm;
15301528

15311529
/* get already prepared memory for 2 cprbs with param block each */

drivers/s390/crypto/zcrypt_ep11misc.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1275,7 +1275,7 @@ int ep11_kblob2protkey(u16 card, u16 dom, const u8 *keyblob, size_t keybloblen,
12751275
u32 pkeybitsize;
12761276
u64 pkeysize;
12771277
u8 res2[8];
1278-
u8 pkey[0];
1278+
u8 pkey[];
12791279
} __packed * wki;
12801280
const u8 *key;
12811281
struct ep11kblob_header *hdr;

drivers/s390/crypto/zcrypt_msgtype6.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -208,7 +208,7 @@ static int icamex_msg_to_type6mex_msgx(struct zcrypt_queue *zq,
208208
struct CPRBX cprbx;
209209
struct function_and_rules_block fr;
210210
unsigned short length;
211-
char text[0];
211+
char text[];
212212
} __packed * msg = ap_msg->msg;
213213
int size;
214214

@@ -278,7 +278,7 @@ static int icacrt_msg_to_type6crt_msgx(struct zcrypt_queue *zq,
278278
struct CPRBX cprbx;
279279
struct function_and_rules_block fr;
280280
unsigned short length;
281-
char text[0];
281+
char text[];
282282
} __packed * msg = ap_msg->msg;
283283
int size;
284284

0 commit comments

Comments
 (0)