@@ -116,27 +116,30 @@ impl VsockPacket {
116
116
/// Returns
117
117
/// - [`VsockError::UnreadableDescriptor`] if the provided descriptor chain contains any
118
118
/// descriptor not marked as writable.
119
- /// - [`VsockError::HdrDescTooSmall `] if the descriptor chain's total buffer length is
120
- /// insufficient to hold the 44 byte vsock header
119
+ /// - [`VsockError::DescChainTooShortForHeader `] if the descriptor chain's total buffer length
120
+ /// is insufficient to hold the 44 byte vsock header
121
121
/// - [`VsockError::InvalidPktLen`] if the contained vsock header describes a vsock packet whose
122
122
/// length would exceed [`defs::MAX_PKT_BUR_SIZE`].
123
- /// - [`VsockError::BufDescTooSmall `] if the contained vsock header describes a vsock packet
124
- /// whose length exceeds the descriptor chain's actual total buffer length.
123
+ /// - [`VsockError::DescChainTooShortForPacket `] if the contained vsock header describes a vsock
124
+ /// packet whose length exceeds the descriptor chain's actual total buffer length.
125
125
pub fn from_tx_virtq_head ( chain : DescriptorChain ) -> Result < Self , VsockError > {
126
126
let buffer = IoVecBuffer :: from_descriptor_chain ( chain) ?;
127
127
128
128
let mut hdr = VsockPacketHeader :: default ( ) ;
129
129
let header_bytes_read = buffer. read_at ( hdr. as_mut_slice ( ) , 0 ) . unwrap_or ( 0 ) ;
130
130
if header_bytes_read < VSOCK_PKT_HDR_SIZE as usize {
131
- return Err ( VsockError :: HdrDescTooSmall ( header_bytes_read) ) ;
131
+ return Err ( VsockError :: DescChainTooShortForHeader ( header_bytes_read) ) ;
132
132
}
133
133
134
134
if hdr. len > defs:: MAX_PKT_BUF_SIZE {
135
135
return Err ( VsockError :: InvalidPktLen ( hdr. len ) ) ;
136
136
}
137
137
138
138
if ( hdr. len as usize ) > buffer. len ( ) - VSOCK_PKT_HDR_SIZE as usize {
139
- return Err ( VsockError :: BufDescTooSmall ) ;
139
+ return Err ( VsockError :: DescChainTooShortForPacket (
140
+ buffer. len ( ) ,
141
+ hdr. len ,
142
+ ) ) ;
140
143
}
141
144
142
145
Ok ( VsockPacket {
@@ -148,13 +151,13 @@ impl VsockPacket {
148
151
/// Create the packet wrapper from an RX virtq chain head.
149
152
///
150
153
/// ## Errors
151
- /// Returns [`VsockError::HdrDescTooSmall `] if the descriptor chain's total buffer length is
152
- /// insufficient to hold the 44 byte vsock header
154
+ /// Returns [`VsockError::DescChainTooShortForHeader `] if the descriptor chain's total buffer
155
+ /// length is insufficient to hold the 44 byte vsock header
153
156
pub fn from_rx_virtq_head ( chain : DescriptorChain ) -> Result < Self , VsockError > {
154
157
let buffer = IoVecBufferMut :: from_descriptor_chain ( chain) ?;
155
158
156
159
if buffer. len ( ) < VSOCK_PKT_HDR_SIZE as usize {
157
- return Err ( VsockError :: HdrDescTooSmall ( buffer. len ( ) ) ) ;
160
+ return Err ( VsockError :: DescChainTooShortForHeader ( buffer. len ( ) ) ) ;
158
161
}
159
162
160
163
Ok ( Self {
@@ -444,7 +447,12 @@ mod tests {
444
447
. len
445
448
. set ( VSOCK_PKT_HDR_SIZE - 1 ) ;
446
449
handler_ctx. guest_txvq . dtable [ 1 ] . len . set ( 0 ) ;
447
- expect_asm_error ! ( tx, test_ctx, handler_ctx, VsockError :: HdrDescTooSmall ( _) ) ;
450
+ expect_asm_error ! (
451
+ tx,
452
+ test_ctx,
453
+ handler_ctx,
454
+ VsockError :: DescChainTooShortForHeader ( _)
455
+ ) ;
448
456
}
449
457
450
458
// Test case: zero-length TX packet.
@@ -477,7 +485,12 @@ mod tests {
477
485
create_context ! ( test_ctx, handler_ctx) ;
478
486
set_pkt_len ( 1024 , & handler_ctx. guest_txvq . dtable [ 0 ] , & test_ctx. mem ) ;
479
487
handler_ctx. guest_txvq . dtable [ 0 ] . flags . set ( 0 ) ;
480
- expect_asm_error ! ( tx, test_ctx, handler_ctx, VsockError :: BufDescTooSmall ) ;
488
+ expect_asm_error ! (
489
+ tx,
490
+ test_ctx,
491
+ handler_ctx,
492
+ VsockError :: DescChainTooShortForPacket ( 44 , 1024 )
493
+ ) ;
481
494
}
482
495
483
496
// Test case: error on write-only buf descriptor.
@@ -495,7 +508,12 @@ mod tests {
495
508
create_context ! ( test_ctx, handler_ctx) ;
496
509
set_pkt_len ( 8 * 1024 , & handler_ctx. guest_txvq . dtable [ 0 ] , & test_ctx. mem ) ;
497
510
handler_ctx. guest_txvq . dtable [ 1 ] . len . set ( 4 * 1024 ) ;
498
- expect_asm_error ! ( tx, test_ctx, handler_ctx, VsockError :: BufDescTooSmall ) ;
511
+ expect_asm_error ! (
512
+ tx,
513
+ test_ctx,
514
+ handler_ctx,
515
+ VsockError :: DescChainTooShortForPacket ( 4140 , 8192 )
516
+ ) ;
499
517
}
500
518
}
501
519
@@ -530,7 +548,12 @@ mod tests {
530
548
. len
531
549
. set ( VSOCK_PKT_HDR_SIZE - 1 ) ;
532
550
handler_ctx. guest_rxvq . dtable [ 1 ] . len . set ( 0 ) ;
533
- expect_asm_error ! ( rx, test_ctx, handler_ctx, VsockError :: HdrDescTooSmall ( _) ) ;
551
+ expect_asm_error ! (
552
+ rx,
553
+ test_ctx,
554
+ handler_ctx,
555
+ VsockError :: DescChainTooShortForHeader ( _)
556
+ ) ;
534
557
}
535
558
}
536
559
0 commit comments