Esempio n. 1
0
    def build_fuzzers(self):
        """Moves the source code we want to fuzz into the project builder and builds
    the fuzzers from that source code. Returns True on success."""
        docker_args, docker_container = docker.get_base_docker_run_args(
            self.workspace, self.config.sanitizer, self.config.language,
            self.config.architecture, self.config.docker_in_docker)
        if not docker_container:
            docker_args.extend(
                _get_docker_build_fuzzers_args_not_container(
                    self.host_repo_path))

        build_command = self.ci_system.get_build_command(
            self.host_repo_path, self.image_repo_path)
        docker_args.extend([
            docker.get_project_image_name(self.config.oss_fuzz_project_name),
            '/bin/bash',
            '-c',
            build_command,
        ])
        logging.info('Building with %s sanitizer.', self.config.sanitizer)

        # TODO(metzman): Stop using helper.docker_run so we can get rid of
        # docker.get_base_docker_run_args and merge its contents into
        # docker.get_base_docker_run_command.
        if not helper.docker_run(docker_args):
            logging.error('Building fuzzers failed.')
            return False

        return True
Esempio n. 2
0
def delete_unneeded_docker_images(config):
    """Deletes unneeded docker images if running in an environment with low
  disk space."""
    if not config.low_disk_space:
        return
    logging.info('Deleting builder docker images to save disk space.')
    project_image = docker.get_project_image_name(config.project_name)
    images = [
        project_image,
        docker.BASE_RUNNER_TAG,
        docker.MSAN_LIBS_BUILDER_TAG,
    ]
    docker.delete_images(images)
Esempio n. 3
0
 def _copy_repo_from_image(self, image_repo_path):
     self._make_repo_storage_dir()
     repo_name = os.path.basename(image_repo_path)
     host_repo_path = os.path.join(self._repo_dir, repo_name)
     bash_command = f'cp -r {image_repo_path} {host_repo_path}'
     docker_args, _ = docker.get_base_docker_run_args(
         self.workspace, self.config.sanitizer, self.config.language,
         self.config.docker_in_docker)
     docker_args.extend([
         docker.get_project_image_name(self.config.oss_fuzz_project_name),
         '/bin/bash', '-c', bash_command
     ])
     if not helper.docker_run(docker_args):
         raise RuntimeError('Failed to copy repo.')
     return repo_manager.RepoManager(host_repo_path)
Esempio n. 4
0
def delete_unneeded_docker_images(config):
    """Deletes unneeded docker images if running in an environment with low
  disk space."""
    if not config.low_disk_space:
        return
    logging.info('Deleting builder docker images to save disk space.')
    project_image = docker.get_project_image_name(config.oss_fuzz_project_name)
    images = [
        project_image,
        docker.BASE_BUILDER_TAG,
        docker.BASE_BUILDER_TAG + '-go',
        docker.BASE_BUILDER_TAG + '-jvm',
        docker.BASE_BUILDER_TAG + '-python',
        docker.BASE_BUILDER_TAG + '-rust',
        docker.BASE_BUILDER_TAG + '-swift',
    ]
    docker.delete_images(images)
Esempio n. 5
0
    def build_fuzzers(self):
        """Moves the source code we want to fuzz into the project builder and builds
    the fuzzers from that source code. Returns True on success."""
        docker_args = get_common_docker_args(self.config.sanitizer,
                                             self.config.language)
        container = utils.get_container_name()

        if container:
            docker_args.extend(
                _get_docker_build_fuzzers_args_container(
                    self.out_dir, container))
        else:
            docker_args.extend(
                _get_docker_build_fuzzers_args_not_container(
                    self.out_dir, self.host_repo_path))

        if self.config.sanitizer == 'memory':
            docker_args.extend(
                _get_docker_build_fuzzers_args_msan(self.work_dir))
            self.handle_msan_prebuild(container)

        docker_args.extend([
            docker.get_project_image_name(self.config.project_name),
            '/bin/bash',
            '-c',
        ])
        rm_path = os.path.join(self.image_repo_path, '*')
        image_src_path = os.path.dirname(self.image_repo_path)
        bash_command = 'rm -rf {0} && cp -r {1} {2} && compile'.format(
            rm_path, self.host_repo_path, image_src_path)
        docker_args.append(bash_command)
        logging.info('Building with %s sanitizer.', self.config.sanitizer)
        if helper.docker_run(docker_args):
            # docker_run returns nonzero on failure.
            logging.error('Building fuzzers failed.')
            return False

        if self.config.sanitizer == 'memory':
            self.handle_msan_postbuild(container)
        return True
Esempio n. 6
0
    def build_fuzzers(self):
        """Moves the source code we want to fuzz into the project builder and builds
    the fuzzers from that source code. Returns True on success."""
        docker_args, docker_container = docker.get_base_docker_run_args(
            self.workspace, self.config.sanitizer, self.config.language)
        if not docker_container:
            docker_args.extend(
                _get_docker_build_fuzzers_args_not_container(
                    self.host_repo_path))

        if self.config.sanitizer == 'memory':
            docker_args.extend(
                _get_docker_build_fuzzers_args_msan(self.workspace.work))
            self.handle_msan_prebuild(docker_container)

        docker_args.extend([
            docker.get_project_image_name(self.config.project_name),
            '/bin/bash',
            '-c',
        ])
        rm_path = os.path.join(self.image_repo_path, '*')
        image_src_path = os.path.dirname(self.image_repo_path)
        bash_command = (f'rm -rf {rm_path} && cp -r {self.host_repo_path} '
                        f'{image_src_path} && compile')
        docker_args.append(bash_command)
        logging.info('Building with %s sanitizer.', self.config.sanitizer)

        # TODO(metzman): Stop using helper.docker_run so we can get rid of
        # docker.get_base_docker_run_args and merge its contents into
        # docker.get_base_docker_run_command.
        if not helper.docker_run(docker_args):
            logging.error('Building fuzzers failed.')
            return False

        if self.config.sanitizer == 'memory':
            self.handle_msan_postbuild(docker_container)
        return True
Esempio n. 7
0
 def test_get_project_image(self):
     """Tests that get_project_image_name works as intended."""
     project = 'my-project'
     self.assertEqual(docker.get_project_image_name(project),
                      'gcr.io/oss-fuzz/my-project')
Esempio n. 8
0
 def test_get_project_image_name(self):
     """Tests that get_project_image_name works as intended."""
     project_name = 'myproject'
     result = docker.get_project_image_name(project_name)
     self.assertEqual(result, 'gcr.io/oss-fuzz/myproject')