@@ -2740,328 +2740,6 @@ mod tests {
2740
2740
}
2741
2741
}
2742
2742
2743
- #[ test]
2744
- #[ cfg( any(
2745
- target_arch = "x86_64" ,
2746
- target_arch = "aarch64" ,
2747
- target_arch = "riscv64"
2748
- ) ) ]
2749
- fn test_faulty_vcpu_fd ( ) {
2750
- use std:: os:: unix:: io:: { FromRawFd , IntoRawFd } ;
2751
-
2752
- let badf_errno = libc:: EBADF ;
2753
-
2754
- let mut faulty_vcpu_fd = VcpuFd {
2755
- vcpu : unsafe { File :: from_raw_fd ( -2 ) } ,
2756
- kvm_run_ptr : KvmRunWrapper {
2757
- kvm_run_ptr : mmap_anonymous ( 10 ) . cast ( ) ,
2758
- mmap_size : 10 ,
2759
- } ,
2760
- coalesced_mmio_ring : None ,
2761
- } ;
2762
-
2763
- assert_eq ! (
2764
- faulty_vcpu_fd. get_mp_state( ) . unwrap_err( ) . errno( ) ,
2765
- badf_errno
2766
- ) ;
2767
- assert_eq ! (
2768
- faulty_vcpu_fd
2769
- . set_mp_state( kvm_mp_state:: default ( ) )
2770
- . unwrap_err( )
2771
- . errno( ) ,
2772
- badf_errno
2773
- ) ;
2774
- #[ cfg( any( target_arch = "x86_64" , target_arch = "aarch64" ) ) ]
2775
- assert_eq ! (
2776
- faulty_vcpu_fd. get_vcpu_events( ) . unwrap_err( ) . errno( ) ,
2777
- badf_errno
2778
- ) ;
2779
- #[ cfg( any( target_arch = "x86_64" , target_arch = "aarch64" ) ) ]
2780
- assert_eq ! (
2781
- faulty_vcpu_fd
2782
- . set_vcpu_events( & kvm_vcpu_events:: default ( ) )
2783
- . unwrap_err( )
2784
- . errno( ) ,
2785
- badf_errno
2786
- ) ;
2787
- assert_eq ! ( faulty_vcpu_fd. run( ) . unwrap_err( ) . errno( ) , badf_errno) ;
2788
-
2789
- // Don't drop the File object, or it'll notice the file it's trying to close is
2790
- // invalid and abort the process.
2791
- let _ = faulty_vcpu_fd. vcpu . into_raw_fd ( ) ;
2792
- }
2793
-
2794
- #[ test]
2795
- #[ cfg( target_arch = "x86_64" ) ]
2796
- fn test_faulty_vcpu_fd_x86_64 ( ) {
2797
- use std:: os:: unix:: io:: { FromRawFd , IntoRawFd } ;
2798
-
2799
- let badf_errno = libc:: EBADF ;
2800
-
2801
- let faulty_vcpu_fd = VcpuFd {
2802
- vcpu : unsafe { File :: from_raw_fd ( -2 ) } ,
2803
- kvm_run_ptr : KvmRunWrapper {
2804
- kvm_run_ptr : mmap_anonymous ( 10 ) . cast ( ) ,
2805
- mmap_size : 10 ,
2806
- } ,
2807
- coalesced_mmio_ring : None ,
2808
- } ;
2809
-
2810
- assert_eq ! ( faulty_vcpu_fd. get_regs( ) . unwrap_err( ) . errno( ) , badf_errno) ;
2811
- assert_eq ! (
2812
- faulty_vcpu_fd
2813
- . set_regs( & unsafe { std:: mem:: zeroed( ) } )
2814
- . unwrap_err( )
2815
- . errno( ) ,
2816
- badf_errno
2817
- ) ;
2818
- assert_eq ! ( faulty_vcpu_fd. get_sregs( ) . unwrap_err( ) . errno( ) , badf_errno) ;
2819
- assert_eq ! (
2820
- faulty_vcpu_fd
2821
- . set_sregs( & unsafe { std:: mem:: zeroed( ) } )
2822
- . unwrap_err( )
2823
- . errno( ) ,
2824
- badf_errno
2825
- ) ;
2826
- assert_eq ! ( faulty_vcpu_fd. get_fpu( ) . unwrap_err( ) . errno( ) , badf_errno) ;
2827
- assert_eq ! (
2828
- faulty_vcpu_fd
2829
- . set_fpu( & unsafe { std:: mem:: zeroed( ) } )
2830
- . unwrap_err( )
2831
- . errno( ) ,
2832
- badf_errno
2833
- ) ;
2834
- assert_eq ! (
2835
- faulty_vcpu_fd
2836
- . set_cpuid2(
2837
- & Kvm :: new( )
2838
- . unwrap( )
2839
- . get_supported_cpuid( KVM_MAX_CPUID_ENTRIES )
2840
- . unwrap( )
2841
- )
2842
- . unwrap_err( )
2843
- . errno( ) ,
2844
- badf_errno
2845
- ) ;
2846
- assert_eq ! (
2847
- faulty_vcpu_fd. get_cpuid2( 1 ) . err( ) . unwrap( ) . errno( ) ,
2848
- badf_errno
2849
- ) ;
2850
- // `kvm_lapic_state` does not implement debug by default so we cannot
2851
- // use unwrap_err here.
2852
- faulty_vcpu_fd. get_lapic ( ) . unwrap_err ( ) ;
2853
- assert_eq ! (
2854
- faulty_vcpu_fd
2855
- . set_lapic( & unsafe { std:: mem:: zeroed( ) } )
2856
- . unwrap_err( )
2857
- . errno( ) ,
2858
- badf_errno
2859
- ) ;
2860
- assert_eq ! (
2861
- faulty_vcpu_fd
2862
- . get_msrs( & mut Msrs :: new( 1 ) . unwrap( ) )
2863
- . unwrap_err( )
2864
- . errno( ) ,
2865
- badf_errno
2866
- ) ;
2867
- assert_eq ! (
2868
- faulty_vcpu_fd
2869
- . set_msrs( & Msrs :: new( 1 ) . unwrap( ) )
2870
- . unwrap_err( )
2871
- . errno( ) ,
2872
- badf_errno
2873
- ) ;
2874
- assert_eq ! (
2875
- faulty_vcpu_fd. get_xsave( ) . err( ) . unwrap( ) . errno( ) ,
2876
- badf_errno
2877
- ) ;
2878
- assert_eq ! (
2879
- // SAFETY: It fails before it copies data and any features are not enabled dynamically.
2880
- unsafe {
2881
- faulty_vcpu_fd
2882
- . set_xsave( & kvm_xsave:: default ( ) )
2883
- . unwrap_err( )
2884
- . errno( )
2885
- } ,
2886
- badf_errno
2887
- ) ;
2888
- assert_eq ! ( faulty_vcpu_fd. get_xcrs( ) . unwrap_err( ) . errno( ) , badf_errno) ;
2889
- assert_eq ! (
2890
- faulty_vcpu_fd
2891
- . set_xcrs( & kvm_xcrs:: default ( ) )
2892
- . err( )
2893
- . unwrap( )
2894
- . errno( ) ,
2895
- badf_errno
2896
- ) ;
2897
- assert_eq ! (
2898
- faulty_vcpu_fd. get_debug_regs( ) . unwrap_err( ) . errno( ) ,
2899
- badf_errno
2900
- ) ;
2901
- assert_eq ! (
2902
- faulty_vcpu_fd
2903
- . set_debug_regs( & kvm_debugregs:: default ( ) )
2904
- . unwrap_err( )
2905
- . errno( ) ,
2906
- badf_errno
2907
- ) ;
2908
- assert_eq ! (
2909
- faulty_vcpu_fd. kvmclock_ctrl( ) . unwrap_err( ) . errno( ) ,
2910
- badf_errno
2911
- ) ;
2912
- faulty_vcpu_fd. get_tsc_khz ( ) . unwrap_err ( ) ;
2913
- faulty_vcpu_fd. set_tsc_khz ( 1000000 ) . unwrap_err ( ) ;
2914
- faulty_vcpu_fd. translate_gva ( u64:: MAX ) . unwrap_err ( ) ;
2915
-
2916
- // Don't drop the File object, or it'll notice the file it's trying to close is
2917
- // invalid and abort the process.
2918
- let _ = faulty_vcpu_fd. vcpu . into_raw_fd ( ) ;
2919
- }
2920
-
2921
- #[ test]
2922
- #[ cfg( target_arch = "aarch64" ) ]
2923
- fn test_faulty_vcpu_target_aarch64 ( ) {
2924
- let kvm = Kvm :: new ( ) . unwrap ( ) ;
2925
- let vm = kvm. create_vm ( ) . unwrap ( ) ;
2926
- let vcpu = vm. create_vcpu ( 0 ) . unwrap ( ) ;
2927
-
2928
- // KVM defines valid targets as 0 to KVM_ARM_NUM_TARGETS-1, so pick a big raw number
2929
- // greater than that as target to be invalid
2930
- let kvi = kvm_vcpu_init {
2931
- target : 300 ,
2932
- ..Default :: default ( )
2933
- } ;
2934
-
2935
- vcpu. vcpu_init ( & kvi) . unwrap_err ( ) ;
2936
- }
2937
-
2938
- #[ test]
2939
- #[ cfg( target_arch = "aarch64" ) ]
2940
- fn test_faulty_vcpu_fd_aarch64 ( ) {
2941
- use std:: os:: unix:: io:: { FromRawFd , IntoRawFd } ;
2942
-
2943
- let badf_errno = libc:: EBADF ;
2944
-
2945
- let faulty_vcpu_fd = VcpuFd {
2946
- vcpu : unsafe { File :: from_raw_fd ( -2 ) } ,
2947
- kvm_run_ptr : KvmRunWrapper {
2948
- kvm_run_ptr : mmap_anonymous ( 10 ) . cast ( ) ,
2949
- mmap_size : 10 ,
2950
- } ,
2951
- coalesced_mmio_ring : None ,
2952
- } ;
2953
-
2954
- let device_attr = kvm_device_attr {
2955
- group : KVM_ARM_VCPU_PMU_V3_CTRL ,
2956
- attr : u64:: from ( KVM_ARM_VCPU_PMU_V3_INIT ) ,
2957
- addr : 0x0 ,
2958
- flags : 0 ,
2959
- } ;
2960
-
2961
- let reg_id = 0x6030_0000_0010_0042 ;
2962
- let mut reg_data = 0u128 . to_le_bytes ( ) ;
2963
-
2964
- assert_eq ! (
2965
- faulty_vcpu_fd
2966
- . set_device_attr( & device_attr)
2967
- . unwrap_err( )
2968
- . errno( ) ,
2969
- badf_errno
2970
- ) ;
2971
- assert_eq ! (
2972
- faulty_vcpu_fd
2973
- . has_device_attr( & device_attr)
2974
- . unwrap_err( )
2975
- . errno( ) ,
2976
- badf_errno
2977
- ) ;
2978
- assert_eq ! (
2979
- faulty_vcpu_fd
2980
- . vcpu_init( & kvm_vcpu_init:: default ( ) )
2981
- . unwrap_err( )
2982
- . errno( ) ,
2983
- badf_errno
2984
- ) ;
2985
- assert_eq ! (
2986
- faulty_vcpu_fd
2987
- . vcpu_finalize( & ( KVM_ARM_VCPU_SVE as i32 ) )
2988
- . unwrap_err( )
2989
- . errno( ) ,
2990
- badf_errno
2991
- ) ;
2992
- assert_eq ! (
2993
- faulty_vcpu_fd
2994
- . get_reg_list( & mut RegList :: new( 500 ) . unwrap( ) )
2995
- . unwrap_err( )
2996
- . errno( ) ,
2997
- badf_errno
2998
- ) ;
2999
- assert_eq ! (
3000
- faulty_vcpu_fd
3001
- . set_one_reg( reg_id, & reg_data)
3002
- . unwrap_err( )
3003
- . errno( ) ,
3004
- badf_errno
3005
- ) ;
3006
- assert_eq ! (
3007
- faulty_vcpu_fd
3008
- . get_one_reg( reg_id, & mut reg_data)
3009
- . unwrap_err( )
3010
- . errno( ) ,
3011
- badf_errno
3012
- ) ;
3013
-
3014
- // Don't drop the File object, or it'll notice the file it's trying to close is
3015
- // invalid and abort the process.
3016
- let _ = faulty_vcpu_fd. vcpu . into_raw_fd ( ) ;
3017
- }
3018
-
3019
- #[ test]
3020
- #[ cfg( target_arch = "riscv64" ) ]
3021
- fn test_faulty_vcpu_fd_riscv64 ( ) {
3022
- use std:: os:: unix:: io:: { FromRawFd , IntoRawFd } ;
3023
-
3024
- let badf_errno = libc:: EBADF ;
3025
-
3026
- let faulty_vcpu_fd = VcpuFd {
3027
- vcpu : unsafe { File :: from_raw_fd ( -2 ) } ,
3028
- kvm_run_ptr : KvmRunWrapper {
3029
- kvm_run_ptr : mmap_anonymous ( 10 ) . cast ( ) ,
3030
- mmap_size : 10 ,
3031
- } ,
3032
- coalesced_mmio_ring : None ,
3033
- } ;
3034
-
3035
- let reg_id = 0x8030_0000_0200_000a ;
3036
- let mut reg_data = 0u128 . to_le_bytes ( ) ;
3037
-
3038
- assert_eq ! (
3039
- faulty_vcpu_fd
3040
- . get_reg_list( & mut RegList :: new( 200 ) . unwrap( ) )
3041
- . unwrap_err( )
3042
- . errno( ) ,
3043
- badf_errno
3044
- ) ;
3045
- assert_eq ! (
3046
- faulty_vcpu_fd
3047
- . set_one_reg( reg_id, & reg_data)
3048
- . unwrap_err( )
3049
- . errno( ) ,
3050
- badf_errno
3051
- ) ;
3052
- assert_eq ! (
3053
- faulty_vcpu_fd
3054
- . get_one_reg( reg_id, & mut reg_data)
3055
- . unwrap_err( )
3056
- . errno( ) ,
3057
- badf_errno
3058
- ) ;
3059
-
3060
- // Don't drop the File object, or it'll notice the file it's trying to close is
3061
- // invalid and abort the process.
3062
- let _ = faulty_vcpu_fd. vcpu . into_raw_fd ( ) ;
3063
- }
3064
-
3065
2743
#[ test]
3066
2744
#[ cfg( target_arch = "aarch64" ) ]
3067
2745
fn test_get_preferred_target ( ) {
0 commit comments