@@ -545,7 +545,8 @@ impl VirtioDevice for Balloon {
545
545
if let Some ( end) = offset. checked_add ( data. len ( ) as u64 ) {
546
546
// This write can't fail, offset and end are checked against config_len.
547
547
data. write_all (
548
- & config_space_bytes[ offset as usize ..cmp:: min ( end, config_len) as usize ] ,
548
+ & config_space_bytes[ usize:: try_from ( offset) . unwrap ( )
549
+ ..usize:: try_from ( cmp:: min ( end, config_len) ) . unwrap ( ) ] ,
549
550
)
550
551
. unwrap ( ) ;
551
552
}
@@ -559,7 +560,9 @@ impl VirtioDevice for Balloon {
559
560
error ! ( "Failed to write config space" ) ;
560
561
return ;
561
562
}
562
- config_space_bytes[ offset as usize ..( offset + data_len) as usize ] . copy_from_slice ( data) ;
563
+ config_space_bytes
564
+ [ usize:: try_from ( offset) . unwrap ( ) ..usize:: try_from ( offset + data_len) . unwrap ( ) ]
565
+ . copy_from_slice ( data) ;
563
566
}
564
567
565
568
fn activate ( & mut self , mem : GuestMemoryMmap ) -> ActivateResult {
@@ -689,7 +692,10 @@ pub(crate) mod tests {
689
692
| ( u64:: from ( * deflate_on_oom) << VIRTIO_BALLOON_F_DEFLATE_ON_OOM )
690
693
| ( ( u64:: from ( * stats_interval) ) << VIRTIO_BALLOON_F_STATS_VQ ) ;
691
694
692
- assert_eq ! ( balloon. avail_features_by_page( 0 ) , features as u32 ) ;
695
+ assert_eq ! (
696
+ balloon. avail_features_by_page( 0 ) ,
697
+ ( features & 0xffff_ffff ) as u32
698
+ ) ;
693
699
assert_eq ! ( balloon. avail_features_by_page( 1 ) , ( features >> 32 ) as u32 ) ;
694
700
for i in 2 ..10 {
695
701
assert_eq ! ( balloon. avail_features_by_page( i) , 0u32 ) ;
@@ -780,7 +786,7 @@ pub(crate) mod tests {
780
786
& infq,
781
787
0 ,
782
788
page_addr,
783
- SIZE_OF_U32 as u32 ,
789
+ u32:: try_from ( SIZE_OF_U32 ) . unwrap ( ) ,
784
790
VIRTQ_DESC_F_NEXT | VIRTQ_DESC_F_WRITE ,
785
791
) ;
786
792
@@ -800,7 +806,7 @@ pub(crate) mod tests {
800
806
& infq,
801
807
1 ,
802
808
page_addr,
803
- SIZE_OF_U32 as u32 + 1 ,
809
+ u32:: try_from ( SIZE_OF_U32 ) . unwrap ( ) + 1 ,
804
810
VIRTQ_DESC_F_NEXT ,
805
811
) ;
806
812
@@ -835,7 +841,13 @@ pub(crate) mod tests {
835
841
// to trigger the inflate event queue.
836
842
{
837
843
mem. write_obj :: < u32 > ( 0x1 , GuestAddress ( page_addr) ) . unwrap ( ) ;
838
- set_request ( & infq, 0 , page_addr, SIZE_OF_U32 as u32 , VIRTQ_DESC_F_NEXT ) ;
844
+ set_request (
845
+ & infq,
846
+ 0 ,
847
+ page_addr,
848
+ u32:: try_from ( SIZE_OF_U32 ) . unwrap ( ) ,
849
+ VIRTQ_DESC_F_NEXT ,
850
+ ) ;
839
851
840
852
check_metric_after_block ! (
841
853
METRICS . balloon. event_fails,
@@ -856,7 +868,13 @@ pub(crate) mod tests {
856
868
// Test the happy case.
857
869
{
858
870
mem. write_obj :: < u32 > ( 0x1 , GuestAddress ( page_addr) ) . unwrap ( ) ;
859
- set_request ( & infq, 0 , page_addr, SIZE_OF_U32 as u32 , VIRTQ_DESC_F_NEXT ) ;
871
+ set_request (
872
+ & infq,
873
+ 0 ,
874
+ page_addr,
875
+ u32:: try_from ( SIZE_OF_U32 ) . unwrap ( ) ,
876
+ VIRTQ_DESC_F_NEXT ,
877
+ ) ;
860
878
861
879
check_metric_after_block ! (
862
880
METRICS . balloon. inflate_count,
@@ -884,7 +902,13 @@ pub(crate) mod tests {
884
902
885
903
// Error case: forgot to trigger deflate event queue.
886
904
{
887
- set_request ( & defq, 0 , page_addr, SIZE_OF_U32 as u32 , VIRTQ_DESC_F_NEXT ) ;
905
+ set_request (
906
+ & defq,
907
+ 0 ,
908
+ page_addr,
909
+ u32:: try_from ( SIZE_OF_U32 ) . unwrap ( ) ,
910
+ VIRTQ_DESC_F_NEXT ,
911
+ ) ;
888
912
check_metric_after_block ! (
889
913
METRICS . balloon. event_fails,
890
914
1 ,
@@ -898,7 +922,13 @@ pub(crate) mod tests {
898
922
899
923
// Happy case.
900
924
{
901
- set_request ( & defq, 1 , page_addr, SIZE_OF_U32 as u32 , VIRTQ_DESC_F_NEXT ) ;
925
+ set_request (
926
+ & defq,
927
+ 1 ,
928
+ page_addr,
929
+ u32:: try_from ( SIZE_OF_U32 ) . unwrap ( ) ,
930
+ VIRTQ_DESC_F_NEXT ,
931
+ ) ;
902
932
check_metric_after_block ! (
903
933
METRICS . balloon. deflate_count,
904
934
1 ,
@@ -920,7 +950,13 @@ pub(crate) mod tests {
920
950
921
951
// Error case: forgot to trigger stats event queue.
922
952
{
923
- set_request ( & statsq, 0 , 0x1000 , SIZE_OF_STAT as u32 , VIRTQ_DESC_F_NEXT ) ;
953
+ set_request (
954
+ & statsq,
955
+ 0 ,
956
+ 0x1000 ,
957
+ u32:: try_from ( SIZE_OF_STAT ) . unwrap ( ) ,
958
+ VIRTQ_DESC_F_NEXT ,
959
+ ) ;
924
960
check_metric_after_block ! (
925
961
METRICS . balloon. event_fails,
926
962
1 ,
@@ -956,7 +992,7 @@ pub(crate) mod tests {
956
992
& statsq,
957
993
0 ,
958
994
page_addr,
959
- 2 * SIZE_OF_STAT as u32 ,
995
+ u32 :: try_from ( 2 * SIZE_OF_STAT ) . unwrap ( ) ,
960
996
VIRTQ_DESC_F_NEXT ,
961
997
) ;
962
998
check_metric_after_block ! ( METRICS . balloon. stats_updates_count, 1 , {
0 commit comments