@@ -1412,55 +1412,48 @@ void handle_message_from_agent(void)
1412
1412
return ;
1413
1413
}
1414
1414
case MSG_TRIGGER_SERVICE3 : {
1415
- struct trigger_service_params3 untrusted_params3 , params3 ;
1416
- size_t service_name_len = hdr .len - sizeof (untrusted_params3 ), nul_offset ;
1417
- char * untrusted_service_name = malloc (service_name_len ), * service_name = NULL ;
1415
+ struct trigger_service_params3 * untrusted_params3 , * params3 ;
1418
1416
1419
- if (!untrusted_service_name )
1417
+ untrusted_params3 = malloc (hdr .len );
1418
+ if (!untrusted_params3 )
1420
1419
handle_vchan_error ("malloc(service_name)" );
1421
1420
1422
- if (libvchan_recv (vchan , & untrusted_params3 , sizeof (untrusted_params3 ))
1423
- != sizeof (untrusted_params3 )) {
1424
- free (untrusted_service_name );
1425
- handle_vchan_error ("recv params3" );
1426
- }
1427
- if (libvchan_recv (vchan , untrusted_service_name , service_name_len )
1428
- != (int )service_name_len ) {
1429
- free (untrusted_service_name );
1421
+ if (libvchan_recv (vchan , untrusted_params3 , hdr .len )
1422
+ != (int )hdr .len ) {
1423
+ free (untrusted_params3 );
1430
1424
handle_vchan_error ("recv params3(service_name)" );
1431
1425
}
1432
- service_name_len -= 1 ;
1426
+ size_t const service_name_len = hdr . len - sizeof ( * untrusted_params3 ) - 1 ;
1433
1427
1434
1428
/* sanitize start */
1435
- ENSURE_NULL_TERMINATED (untrusted_params3 . target_domain );
1436
- sanitize_name (untrusted_params3 . target_domain , "@:" );
1437
- if (!validate_request_id (& untrusted_params3 . request_id , "MSG_TRIGGER_SERVICE3" ))
1429
+ ENSURE_NULL_TERMINATED (untrusted_params3 -> target_domain );
1430
+ sanitize_name (untrusted_params3 -> target_domain , "@:" );
1431
+ if (!validate_request_id (& untrusted_params3 -> request_id , "MSG_TRIGGER_SERVICE3" ))
1438
1432
goto fail3 ;
1439
- params3 = untrusted_params3 ;
1440
- if (untrusted_service_name [service_name_len ] != 0 ) {
1433
+ if (untrusted_params3 -> service_name [service_name_len ] != 0 ) {
1441
1434
LOG (ERROR , "Service name not NUL-terminated" );
1442
1435
goto fail3 ;
1443
1436
}
1444
- nul_offset = strlen (untrusted_service_name );
1437
+ size_t const nul_offset = strlen (untrusted_params3 -> service_name );
1445
1438
if (nul_offset != service_name_len ) {
1446
1439
LOG (ERROR , "Service name contains NUL byte at offset %zu" , nul_offset );
1447
1440
goto fail3 ;
1448
1441
}
1449
- if (!validate_service_name (untrusted_service_name ))
1442
+ if (!validate_service_name (untrusted_params3 -> service_name ))
1450
1443
goto fail3 ;
1451
- service_name = untrusted_service_name ;
1452
- untrusted_service_name = NULL ;
1444
+ params3 = untrusted_params3 ;
1445
+ untrusted_params3 = NULL ;
1453
1446
/* sanitize end */
1454
1447
1455
1448
handle_execute_service (remote_domain_id , remote_domain_name ,
1456
- params3 . target_domain ,
1457
- service_name ,
1458
- & params3 . request_id );
1459
- free (service_name );
1449
+ params3 -> target_domain ,
1450
+ params3 -> service_name ,
1451
+ & params3 -> request_id );
1452
+ free (params3 );
1460
1453
return ;
1461
1454
fail3 :
1462
- send_service_refused (vchan , & untrusted_params3 . request_id );
1463
- free (untrusted_service_name );
1455
+ send_service_refused (vchan , & untrusted_params3 -> request_id );
1456
+ free (untrusted_params3 );
1464
1457
return ;
1465
1458
}
1466
1459
case MSG_CONNECTION_TERMINATED :
0 commit comments