Skip to content

Commit 1d61e44

Browse files
author
whitequark
committedAug 8, 2015
session.c: ensure session reset on out buffer overrun during RPC.
1 parent f5ea202 commit 1d61e44

File tree

1 file changed

+12
-6
lines changed

1 file changed

+12
-6
lines changed
 

Diff for: ‎soc/runtime/session.c

+12-6
Original file line numberDiff line numberDiff line change
@@ -474,7 +474,8 @@ static int process_input(void)
474474

475475
static int send_rpc_value(const char **tag, void *value)
476476
{
477-
out_packet_int8(**tag);
477+
if(!out_packet_int8(**tag))
478+
return -1;
478479

479480
int size = 0;
480481
switch(**tag) {
@@ -484,23 +485,27 @@ static int send_rpc_value(const char **tag, void *value)
484485

485486
case 'b': // bool
486487
size = 1;
487-
out_packet_chunk(value, size);
488+
if(!out_packet_chunk(value, size))
489+
return -1;
488490
break;
489491

490492
case 'i': // int(width=32)
491493
size = 4;
492-
out_packet_chunk(value, size);
494+
if(!out_packet_chunk(value, size))
495+
return -1;
493496
break;
494497

495498
case 'I': // int(width=64)
496499
case 'f': // float
497500
size = 8;
498-
out_packet_chunk(value, size);
501+
if(!out_packet_chunk(value, size))
502+
return -1;
499503
break;
500504

501505
case 'F': // Fraction
502506
size = 16;
503-
out_packet_chunk(value, size);
507+
if(!out_packet_chunk(value, size))
508+
return -1;
504509
break;
505510

506511
case 'l': { // list(elt='a)
@@ -604,7 +609,7 @@ static int process_kmsg(struct msg_base *umsg)
604609

605610
if(!send_rpc_request(msg->rpc_num, msg->args)) {
606611
log("Failed to send RPC request");
607-
return 0;
612+
return 0; // restart session
608613
}
609614

610615
user_kernel_state = USER_KERNEL_WAIT_RPC;
@@ -617,6 +622,7 @@ static int process_kmsg(struct msg_base *umsg)
617622
umsg->type);
618623
return 0;
619624
}
625+
620626
return 1;
621627
}
622628

0 commit comments

Comments
 (0)