@@ -114,7 +114,7 @@ static bool is_vmpck_empty(struct snp_guest_dev *snp_dev)
114114 */
115115static void snp_disable_vmpck (struct snp_guest_dev * snp_dev )
116116{
117- dev_alert (snp_dev -> dev , "Disabling vmpck_id %d to prevent IV reuse.\n" ,
117+ dev_alert (snp_dev -> dev , "Disabling VMPCK%d communication key to prevent IV reuse.\n" ,
118118 vmpck_id );
119119 memzero_explicit (snp_dev -> vmpck , VMPCK_KEY_LEN );
120120 snp_dev -> vmpck = NULL ;
@@ -291,44 +291,45 @@ static int dec_payload(struct snp_guest_dev *snp_dev, struct snp_guest_msg *msg,
291291static int verify_and_dec_payload (struct snp_guest_dev * snp_dev , void * payload , u32 sz )
292292{
293293 struct snp_guest_crypto * crypto = snp_dev -> crypto ;
294- struct snp_guest_msg * resp = & snp_dev -> secret_response ;
295- struct snp_guest_msg * req = & snp_dev -> secret_request ;
296- struct snp_guest_msg_hdr * req_hdr = & req -> hdr ;
297- struct snp_guest_msg_hdr * resp_hdr = & resp -> hdr ;
294+ struct snp_guest_msg * resp_msg = & snp_dev -> secret_response ;
295+ struct snp_guest_msg * req_msg = & snp_dev -> secret_request ;
296+ struct snp_guest_msg_hdr * req_msg_hdr = & req_msg -> hdr ;
297+ struct snp_guest_msg_hdr * resp_msg_hdr = & resp_msg -> hdr ;
298298
299- dev_dbg (snp_dev -> dev , "response [seqno %lld type %d version %d sz %d]\n" ,
300- resp_hdr -> msg_seqno , resp_hdr -> msg_type , resp_hdr -> msg_version , resp_hdr -> msg_sz );
299+ pr_debug ("response [seqno %lld type %d version %d sz %d]\n" ,
300+ resp_msg_hdr -> msg_seqno , resp_msg_hdr -> msg_type , resp_msg_hdr -> msg_version ,
301+ resp_msg_hdr -> msg_sz );
301302
302303 /* Copy response from shared memory to encrypted memory. */
303- memcpy (resp , snp_dev -> response , sizeof (* resp ));
304+ memcpy (resp_msg , snp_dev -> response , sizeof (* resp_msg ));
304305
305306 /* Verify that the sequence counter is incremented by 1 */
306- if (unlikely (resp_hdr -> msg_seqno != (req_hdr -> msg_seqno + 1 )))
307+ if (unlikely (resp_msg_hdr -> msg_seqno != (req_msg_hdr -> msg_seqno + 1 )))
307308 return - EBADMSG ;
308309
309310 /* Verify response message type and version number. */
310- if (resp_hdr -> msg_type != (req_hdr -> msg_type + 1 ) ||
311- resp_hdr -> msg_version != req_hdr -> msg_version )
311+ if (resp_msg_hdr -> msg_type != (req_msg_hdr -> msg_type + 1 ) ||
312+ resp_msg_hdr -> msg_version != req_msg_hdr -> msg_version )
312313 return - EBADMSG ;
313314
314315 /*
315316 * If the message size is greater than our buffer length then return
316317 * an error.
317318 */
318- if (unlikely ((resp_hdr -> msg_sz + crypto -> a_len ) > sz ))
319+ if (unlikely ((resp_msg_hdr -> msg_sz + crypto -> a_len ) > sz ))
319320 return - EBADMSG ;
320321
321322 /* Decrypt the payload */
322- return dec_payload (snp_dev , resp , payload , resp_hdr -> msg_sz + crypto -> a_len );
323+ return dec_payload (snp_dev , resp_msg , payload , resp_msg_hdr -> msg_sz + crypto -> a_len );
323324}
324325
325326static int enc_payload (struct snp_guest_dev * snp_dev , u64 seqno , int version , u8 type ,
326327 void * payload , size_t sz )
327328{
328- struct snp_guest_msg * req = & snp_dev -> secret_request ;
329- struct snp_guest_msg_hdr * hdr = & req -> hdr ;
329+ struct snp_guest_msg * msg = & snp_dev -> secret_request ;
330+ struct snp_guest_msg_hdr * hdr = & msg -> hdr ;
330331
331- memset (req , 0 , sizeof (* req ));
332+ memset (msg , 0 , sizeof (* msg ));
332333
333334 hdr -> algo = SNP_AEAD_AES_256_GCM ;
334335 hdr -> hdr_version = MSG_HDR_VER ;
@@ -343,10 +344,10 @@ static int enc_payload(struct snp_guest_dev *snp_dev, u64 seqno, int version, u8
343344 if (!hdr -> msg_seqno )
344345 return - ENOSR ;
345346
346- dev_dbg ( snp_dev -> dev , "request [seqno %lld type %d version %d sz %d]\n" ,
347- hdr -> msg_seqno , hdr -> msg_type , hdr -> msg_version , hdr -> msg_sz );
347+ pr_debug ( "request [seqno %lld type %d version %d sz %d]\n" ,
348+ hdr -> msg_seqno , hdr -> msg_type , hdr -> msg_version , hdr -> msg_sz );
348349
349- return __enc_payload (snp_dev , req , payload , sz );
350+ return __enc_payload (snp_dev , msg , payload , sz );
350351}
351352
352353static int __handle_guest_request (struct snp_guest_dev * snp_dev , u64 exit_code ,
@@ -495,47 +496,46 @@ struct snp_req_resp {
495496static int get_report (struct snp_guest_dev * snp_dev , struct snp_guest_request_ioctl * arg )
496497{
497498 struct snp_guest_crypto * crypto = snp_dev -> crypto ;
498- struct snp_report_req * req = & snp_dev -> req .report ;
499- struct snp_report_resp * resp ;
499+ struct snp_report_req * report_req = & snp_dev -> req .report ;
500+ struct snp_report_resp * report_resp ;
500501 int rc , resp_len ;
501502
502503 lockdep_assert_held (& snp_cmd_mutex );
503504
504505 if (!arg -> req_data || !arg -> resp_data )
505506 return - EINVAL ;
506507
507- if (copy_from_user (req , (void __user * )arg -> req_data , sizeof (* req )))
508+ if (copy_from_user (report_req , (void __user * )arg -> req_data , sizeof (* report_req )))
508509 return - EFAULT ;
509510
510511 /*
511512 * The intermediate response buffer is used while decrypting the
512513 * response payload. Make sure that it has enough space to cover the
513514 * authtag.
514515 */
515- resp_len = sizeof (resp -> data ) + crypto -> a_len ;
516- resp = kzalloc (resp_len , GFP_KERNEL_ACCOUNT );
517- if (!resp )
516+ resp_len = sizeof (report_resp -> data ) + crypto -> a_len ;
517+ report_resp = kzalloc (resp_len , GFP_KERNEL_ACCOUNT );
518+ if (!report_resp )
518519 return - ENOMEM ;
519520
520- rc = handle_guest_request (snp_dev , SVM_VMGEXIT_GUEST_REQUEST , arg ,
521- SNP_MSG_REPORT_REQ , req , sizeof (* req ), resp -> data ,
522- resp_len );
521+ rc = handle_guest_request (snp_dev , SVM_VMGEXIT_GUEST_REQUEST , arg , SNP_MSG_REPORT_REQ ,
522+ report_req , sizeof (* report_req ), report_resp -> data , resp_len );
523523 if (rc )
524524 goto e_free ;
525525
526- if (copy_to_user ((void __user * )arg -> resp_data , resp , sizeof (* resp )))
526+ if (copy_to_user ((void __user * )arg -> resp_data , report_resp , sizeof (* report_resp )))
527527 rc = - EFAULT ;
528528
529529e_free :
530- kfree (resp );
530+ kfree (report_resp );
531531 return rc ;
532532}
533533
534534static int get_derived_key (struct snp_guest_dev * snp_dev , struct snp_guest_request_ioctl * arg )
535535{
536- struct snp_derived_key_req * req = & snp_dev -> req .derived_key ;
536+ struct snp_derived_key_req * derived_key_req = & snp_dev -> req .derived_key ;
537537 struct snp_guest_crypto * crypto = snp_dev -> crypto ;
538- struct snp_derived_key_resp resp = {0 };
538+ struct snp_derived_key_resp derived_key_resp = {0 };
539539 int rc , resp_len ;
540540 /* Response data is 64 bytes and max authsize for GCM is 16 bytes. */
541541 u8 buf [64 + 16 ];
@@ -550,35 +550,37 @@ static int get_derived_key(struct snp_guest_dev *snp_dev, struct snp_guest_reque
550550 * response payload. Make sure that it has enough space to cover the
551551 * authtag.
552552 */
553- resp_len = sizeof (resp .data ) + crypto -> a_len ;
553+ resp_len = sizeof (derived_key_resp .data ) + crypto -> a_len ;
554554 if (sizeof (buf ) < resp_len )
555555 return - ENOMEM ;
556556
557- if (copy_from_user (req , (void __user * )arg -> req_data , sizeof (* req )))
557+ if (copy_from_user (derived_key_req , (void __user * )arg -> req_data ,
558+ sizeof (* derived_key_req )))
558559 return - EFAULT ;
559560
560- rc = handle_guest_request (snp_dev , SVM_VMGEXIT_GUEST_REQUEST , arg ,
561- SNP_MSG_KEY_REQ , req , sizeof (* req ), buf , resp_len );
561+ rc = handle_guest_request (snp_dev , SVM_VMGEXIT_GUEST_REQUEST , arg , SNP_MSG_KEY_REQ ,
562+ derived_key_req , sizeof (* derived_key_req ), buf , resp_len );
562563 if (rc )
563564 return rc ;
564565
565- memcpy (resp .data , buf , sizeof (resp .data ));
566- if (copy_to_user ((void __user * )arg -> resp_data , & resp , sizeof (resp )))
566+ memcpy (derived_key_resp .data , buf , sizeof (derived_key_resp .data ));
567+ if (copy_to_user ((void __user * )arg -> resp_data , & derived_key_resp ,
568+ sizeof (derived_key_resp )))
567569 rc = - EFAULT ;
568570
569571 /* The response buffer contains the sensitive data, explicitly clear it. */
570572 memzero_explicit (buf , sizeof (buf ));
571- memzero_explicit (& resp , sizeof (resp ));
573+ memzero_explicit (& derived_key_resp , sizeof (derived_key_resp ));
572574 return rc ;
573575}
574576
575577static int get_ext_report (struct snp_guest_dev * snp_dev , struct snp_guest_request_ioctl * arg ,
576578 struct snp_req_resp * io )
577579
578580{
579- struct snp_ext_report_req * req = & snp_dev -> req .ext_report ;
581+ struct snp_ext_report_req * report_req = & snp_dev -> req .ext_report ;
580582 struct snp_guest_crypto * crypto = snp_dev -> crypto ;
581- struct snp_report_resp * resp ;
583+ struct snp_report_resp * report_resp ;
582584 int ret , npages = 0 , resp_len ;
583585 sockptr_t certs_address ;
584586
@@ -587,22 +589,22 @@ static int get_ext_report(struct snp_guest_dev *snp_dev, struct snp_guest_reques
587589 if (sockptr_is_null (io -> req_data ) || sockptr_is_null (io -> resp_data ))
588590 return - EINVAL ;
589591
590- if (copy_from_sockptr (req , io -> req_data , sizeof (* req )))
592+ if (copy_from_sockptr (report_req , io -> req_data , sizeof (* report_req )))
591593 return - EFAULT ;
592594
593595 /* caller does not want certificate data */
594- if (!req -> certs_len || !req -> certs_address )
596+ if (!report_req -> certs_len || !report_req -> certs_address )
595597 goto cmd ;
596598
597- if (req -> certs_len > SEV_FW_BLOB_MAX_SIZE ||
598- !IS_ALIGNED (req -> certs_len , PAGE_SIZE ))
599+ if (report_req -> certs_len > SEV_FW_BLOB_MAX_SIZE ||
600+ !IS_ALIGNED (report_req -> certs_len , PAGE_SIZE ))
599601 return - EINVAL ;
600602
601603 if (sockptr_is_kernel (io -> resp_data )) {
602- certs_address = KERNEL_SOCKPTR ((void * )req -> certs_address );
604+ certs_address = KERNEL_SOCKPTR ((void * )report_req -> certs_address );
603605 } else {
604- certs_address = USER_SOCKPTR ((void __user * )req -> certs_address );
605- if (!access_ok (certs_address .user , req -> certs_len ))
606+ certs_address = USER_SOCKPTR ((void __user * )report_req -> certs_address );
607+ if (!access_ok (certs_address .user , report_req -> certs_len ))
606608 return - EFAULT ;
607609 }
608610
@@ -612,45 +614,45 @@ static int get_ext_report(struct snp_guest_dev *snp_dev, struct snp_guest_reques
612614 * the host. If host does not supply any certs in it, then copy
613615 * zeros to indicate that certificate data was not provided.
614616 */
615- memset (snp_dev -> certs_data , 0 , req -> certs_len );
616- npages = req -> certs_len >> PAGE_SHIFT ;
617+ memset (snp_dev -> certs_data , 0 , report_req -> certs_len );
618+ npages = report_req -> certs_len >> PAGE_SHIFT ;
617619cmd :
618620 /*
619621 * The intermediate response buffer is used while decrypting the
620622 * response payload. Make sure that it has enough space to cover the
621623 * authtag.
622624 */
623- resp_len = sizeof (resp -> data ) + crypto -> a_len ;
624- resp = kzalloc (resp_len , GFP_KERNEL_ACCOUNT );
625- if (!resp )
625+ resp_len = sizeof (report_resp -> data ) + crypto -> a_len ;
626+ report_resp = kzalloc (resp_len , GFP_KERNEL_ACCOUNT );
627+ if (!report_resp )
626628 return - ENOMEM ;
627629
628630 snp_dev -> input .data_npages = npages ;
629- ret = handle_guest_request (snp_dev , SVM_VMGEXIT_EXT_GUEST_REQUEST , arg ,
630- SNP_MSG_REPORT_REQ , & req -> data ,
631- sizeof ( req -> data ), resp -> data , resp_len );
631+ ret = handle_guest_request (snp_dev , SVM_VMGEXIT_EXT_GUEST_REQUEST , arg , SNP_MSG_REPORT_REQ ,
632+ & report_req -> data , sizeof ( report_req -> data ) ,
633+ report_resp -> data , resp_len );
632634
633635 /* If certs length is invalid then copy the returned length */
634636 if (arg -> vmm_error == SNP_GUEST_VMM_ERR_INVALID_LEN ) {
635- req -> certs_len = snp_dev -> input .data_npages << PAGE_SHIFT ;
637+ report_req -> certs_len = snp_dev -> input .data_npages << PAGE_SHIFT ;
636638
637- if (copy_to_sockptr (io -> req_data , req , sizeof (* req )))
639+ if (copy_to_sockptr (io -> req_data , report_req , sizeof (* report_req )))
638640 ret = - EFAULT ;
639641 }
640642
641643 if (ret )
642644 goto e_free ;
643645
644- if (npages && copy_to_sockptr (certs_address , snp_dev -> certs_data , req -> certs_len )) {
646+ if (npages && copy_to_sockptr (certs_address , snp_dev -> certs_data , report_req -> certs_len )) {
645647 ret = - EFAULT ;
646648 goto e_free ;
647649 }
648650
649- if (copy_to_sockptr (io -> resp_data , resp , sizeof (* resp )))
651+ if (copy_to_sockptr (io -> resp_data , report_resp , sizeof (* report_resp )))
650652 ret = - EFAULT ;
651653
652654e_free :
653- kfree (resp );
655+ kfree (report_resp );
654656 return ret ;
655657}
656658
@@ -1090,6 +1092,8 @@ static int __init sev_guest_probe(struct platform_device *pdev)
10901092 void __iomem * mapping ;
10911093 int ret ;
10921094
1095+ BUILD_BUG_ON (sizeof (struct snp_guest_msg ) > PAGE_SIZE );
1096+
10931097 if (!cc_platform_has (CC_ATTR_GUEST_SEV_SNP ))
10941098 return - ENODEV ;
10951099
@@ -1115,13 +1119,13 @@ static int __init sev_guest_probe(struct platform_device *pdev)
11151119 ret = - EINVAL ;
11161120 snp_dev -> vmpck = get_vmpck (vmpck_id , secrets , & snp_dev -> os_area_msg_seqno );
11171121 if (!snp_dev -> vmpck ) {
1118- dev_err (dev , "invalid vmpck id %d \n" , vmpck_id );
1122+ dev_err (dev , "Invalid VMPCK%d communication key \n" , vmpck_id );
11191123 goto e_unmap ;
11201124 }
11211125
11221126 /* Verify that VMPCK is not zero. */
11231127 if (is_vmpck_empty (snp_dev )) {
1124- dev_err (dev , "vmpck id %d is null \n" , vmpck_id );
1128+ dev_err (dev , "Empty VMPCK %d communication key \n" , vmpck_id );
11251129 goto e_unmap ;
11261130 }
11271131
@@ -1172,7 +1176,7 @@ static int __init sev_guest_probe(struct platform_device *pdev)
11721176 if (ret )
11731177 goto e_free_cert_data ;
11741178
1175- dev_info (dev , "Initialized SEV guest driver (using vmpck_id %d )\n" , vmpck_id );
1179+ dev_info (dev , "Initialized SEV guest driver (using VMPCK%d communication key )\n" , vmpck_id );
11761180 return 0 ;
11771181
11781182e_free_cert_data :
0 commit comments