Home | History | Annotate | Download | only in kernel.config
      1 /*
      2  * Copyright (C) 2016 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 #ifndef ASLR_TEST_H
     18 #define ASLR_TEST_H
     19 
     20 #include <cmath>
     21 #include <errno.h>
     22 #include <fstream>
     23 #include <iostream>
     24 #include <stdint.h>
     25 #include <string>
     26 #include <sys/wait.h>
     27 #include <unistd.h>
     28 #include <unordered_set>
     29 
     30 #include <gtest/gtest.h>
     31 
     32 #define MAX_ADDR_LEN 256
     33 
     34 #define PROCFS_PATH "/proc/sys/vm/mmap_rnd_bits"
     35 #define PROCFS_COMPAT_PATH "/proc/sys/vm/mmap_rnd_compat_bits"
     36 
     37 #define SCRAPE_PATH_64 "/data/nativetest64/scrape_mmap_addr/scrape_mmap_addr"
     38 #define SCRAPE_PATH_32 "/data/nativetest/scrape_mmap_addr/scrape_mmap_addr"
     39 #define SCRAPE_LIB_64 "/system/bin/linker64"
     40 #define SCRAPE_LIB_32 "/system/bin/linker"
     41 
     42 class AslrMmapTest : public ::testing::Test {
     43   protected:
     44     static void SetUpTestCase();
     45     static const char *path;
     46     static const char *lib;
     47     static unsigned int def, min, max;
     48     static bool compat, user32;
     49     static unsigned int def_cmpt, min_cmpt, max_cmpt;
     50 
     51     void TearDown();
     52 };
     53 
     54 /*
     55  * gets the current mmap_rnd_bits value. requires root.
     56  */
     57 unsigned int get_mmap_rnd_bits(bool compat);
     58 
     59 /*
     60  * sets the corresponding mmap_rnd_bits variable, returns false if couldn't
     61  * change. requires root.
     62  */
     63 bool set_mmap_rnd_bits(unsigned int new_val, bool compat);
     64 
     65 /*
     66  * scrape_addr - get the raw starting address from /proc/child_pid/mmaps
     67  */
     68 std::string scrape_addr(const char *exec_name, const char *lib_match);
     69 
     70 /*
     71  * forks off sample_size processes and records the starting address of the
     72  * indicated library as reported by exec_name.  Reports entropy observed among
     73  * recorded samples.
     74  */
     75 unsigned int calc_mmap_entropy(const char *exec_name, const char *lib_match, size_t samp_sz);
     76 
     77 #endif //ASLR_TEST_H
     78