Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 


Quelle  test_prctl.rs   Sprache: unbekannt

 
#[cfg(target_os = "linux")]
#[cfg(feature = "process")]
mod test_prctl {
    use std::ffi::CStr;

    use nix::sys::prctl;

    #[cfg_attr(qemu, ignore)]
    #[test]
    fn test_get_set_subreaper() {
        let original = prctl::get_child_subreaper().unwrap();

        prctl::set_child_subreaper(true).unwrap();
        let subreaper = prctl::get_child_subreaper().unwrap();
        assert!(subreaper);

        prctl::set_child_subreaper(original).unwrap();
    }

    #[test]
    fn test_get_set_dumpable() {
        let original = prctl::get_dumpable().unwrap();

        prctl::set_dumpable(false).unwrap();
        let dumpable = prctl::get_dumpable().unwrap();
        assert!(!dumpable);

        prctl::set_dumpable(original).unwrap();
    }

    #[test]
    fn test_get_set_keepcaps() {
        let original = prctl::get_keepcaps().unwrap();

        prctl::set_keepcaps(true).unwrap();
        let keepcaps = prctl::get_keepcaps().unwrap();
        assert!(keepcaps);

        prctl::set_keepcaps(original).unwrap();
    }

    #[test]
    fn test_get_set_clear_mce_kill() {
        use prctl::PrctlMCEKillPolicy::*;

        prctl::set_mce_kill(PR_MCE_KILL_LATE).unwrap();
        let mce = prctl::get_mce_kill().unwrap();
        assert_eq!(mce, PR_MCE_KILL_LATE);

        prctl::clear_mce_kill().unwrap();
        let mce = prctl::get_mce_kill().unwrap();
        assert_eq!(mce, PR_MCE_KILL_DEFAULT);
    }

    #[cfg_attr(qemu, ignore)]
    #[test]
    fn test_get_set_pdeathsig() {
        use nix::sys::signal::Signal;

        let original = prctl::get_pdeathsig().unwrap();

        prctl::set_pdeathsig(Signal::SIGUSR1).unwrap();
        let sig = prctl::get_pdeathsig().unwrap();
        assert_eq!(sig, Some(Signal::SIGUSR1));

        prctl::set_pdeathsig(original).unwrap();
    }

    #[test]
    fn test_get_set_name() {
        let original = prctl::get_name().unwrap();

        let long_name =
            CStr::from_bytes_with_nul(b"0123456789abcdefghijklmn\0").unwrap();
        prctl::set_name(long_name).unwrap();
        let res = prctl::get_name().unwrap();

        // name truncated by kernel to TASK_COMM_LEN
        assert_eq!(&long_name.to_str().unwrap()[..15], res.to_str().unwrap());

        let short_name = CStr::from_bytes_with_nul(b"01234567\0").unwrap();
        prctl::set_name(short_name).unwrap();
        let res = prctl::get_name().unwrap();
        assert_eq!(short_name.to_str().unwrap(), res.to_str().unwrap());

        prctl::set_name(&original).unwrap();
    }

    #[cfg_attr(qemu, ignore)]
    #[test]
    fn test_get_set_timerslack() {
        let original = prctl::get_timerslack().unwrap();

        let slack = 60_000;
        prctl::set_timerslack(slack).unwrap();
        let res = prctl::get_timerslack().unwrap();
        assert_eq!(slack, res as u64);

        prctl::set_timerslack(original as u64).unwrap();
    }

    #[test]
    fn test_disable_enable_perf_events() {
        prctl::task_perf_events_disable().unwrap();
        prctl::task_perf_events_enable().unwrap();
    }

    #[test]
    fn test_get_set_no_new_privs() {
        prctl::set_no_new_privs().unwrap();
        let no_new_privs = prctl::get_no_new_privs().unwrap();
        assert!(no_new_privs);
    }

    #[test]
    fn test_get_set_thp_disable() {
        let original = prctl::get_thp_disable().unwrap();

        prctl::set_thp_disable(true).unwrap();
        let thp_disable = prctl::get_thp_disable().unwrap();
        assert!(thp_disable);

        prctl::set_thp_disable(original).unwrap();
    }

    #[test]
    fn test_set_vma_anon_name() {
        use nix::errno::Errno;
        use nix::sys::mman;
        use std::num::NonZeroUsize;

        const ONE_K: libc::size_t = 1024;
        let sz = NonZeroUsize::new(ONE_K).unwrap();
        let ptr = unsafe {
            mman::mmap_anonymous(
                None,
                sz,
                mman::ProtFlags::PROT_READ,
                mman::MapFlags::MAP_SHARED,
            )
            .unwrap()
        };
        let err = prctl::set_vma_anon_name(
            ptr,
            sz,
            Some(CStr::from_bytes_with_nul(b"[,$\0").unwrap()),
        )
        .unwrap_err();
        assert_eq!(err, Errno::EINVAL);
        // `CONFIG_ANON_VMA_NAME` kernel config might not be set
        prctl::set_vma_anon_name(
            ptr,
            sz,
            Some(CStr::from_bytes_with_nul(b"Nix\0").unwrap()),
        )
        .unwrap_or_default();
        prctl::set_vma_anon_name(ptr, sz, None).unwrap_or_default();
    }
}

[ Dauer der Verarbeitung: 0.14 Sekunden  (vorverarbeitet)  ]

                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Produkte
     Quellcodebibliothek

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....

Besucherstatistik

Besucherstatistik

Monitoring

Montastic status badge