Skip to content
Snippets Groups Projects
Select Git revision
  • ec79ef2e7b6b1d81266637ca0e002b5c0c5a789b
  • master default protected
  • android-7.1.2_r28_klist
  • oreo-mr1-iot-release
  • sdk-release
  • pie-cts-dev
  • pie-cts-release
  • pie-vts-release
  • nougat-iot-release
  • pie-gsi
  • pie-platform-release
  • pie-r2-release
  • pie-r2-s1-release
  • pie-release
  • pie-dev
  • oreo-m4-s4-release
  • o-mr1-iot-preview-8
  • oreo-m2-s2-release
  • oreo-m2-s1-release
  • oreo-m6-s2-release
  • oreo-m6-s3-release
  • android-o-mr1-iot-release-1.0.4
  • android-9.0.0_r8
  • android-9.0.0_r7
  • android-9.0.0_r6
  • android-9.0.0_r5
  • android-8.1.0_r46
  • android-8.1.0_r45
  • android-n-iot-release-smart-display-r2
  • android-vts-8.1_r5
  • android-cts-8.1_r8
  • android-cts-8.0_r12
  • android-cts-7.1_r20
  • android-cts-7.0_r24
  • android-cts-6.0_r31
  • android-o-mr1-iot-release-1.0.3
  • android-cts-9.0_r1
  • android-8.1.0_r43
  • android-8.1.0_r42
  • android-n-iot-release-smart-display
  • android-p-preview-5
41 results

ProcessCallStack.h

Blame
  • insmod.c 1.76 KiB
    #include <stdio.h>
    #include <string.h>
    #include <fcntl.h>
    #include <unistd.h>
    #include <malloc.h>
    #include <errno.h>
    #include <sys/param.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <unistd.h>
    
    extern int init_module(void *, unsigned long, const char *);
    
    static void *read_file(const char *filename, ssize_t *_size)
    {
    	int ret, fd;
    	struct stat sb;
    	ssize_t size;
    	void *buffer = NULL;
    
    	/* open the file */
    	fd = open(filename, O_RDONLY);
    	if (fd < 0)
    		return NULL;
    
    	/* find out how big it is */
    	if (fstat(fd, &sb) < 0)
    		goto bail;
    	size = sb.st_size;
    
    	/* allocate memory for it to be read into */
    	buffer = malloc(size);
    	if (!buffer)
    		goto bail;
    
    	/* slurp it into our buffer */
    	ret = read(fd, buffer, size);
    	if (ret != size)
    		goto bail;
    
    	/* let the caller know how big it is */
    	*_size = size;
    
    bail:
    	close(fd);
    	return buffer;
    }
    
    int insmod_main(int argc, char **argv)
    {
    	void *file;
    	ssize_t size = 0;
    	char opts[1024];
    	int ret;
    
    	/* make sure we've got an argument */
    	if (argc < 2) {
    		fprintf(stderr, "usage: insmod <module.o>\n");
    		return -1;
    	}
    
    	/* read the file into memory */
    	file = read_file(argv[1], &size);
    	if (!file) {
    		fprintf(stderr, "insmod: can't open '%s'\n", argv[1]);
    		return -1;
    	}
    
    	opts[0] = '\0';
    	if (argc > 2) {
    		int i, len;
    		char *end = opts + sizeof(opts) - 1;
    		char *ptr = opts;
    
    		for (i = 2; (i < argc) && (ptr < end); i++) {
    			len = MIN(strlen(argv[i]), (size_t)(end - ptr));
    			memcpy(ptr, argv[i], len);
    			ptr += len;
    			*ptr++ = ' ';
    		}
    		*(ptr - 1) = '\0';
    	}
    
    	/* pass it to the kernel */
    	ret = init_module(file, size, opts);
    	if (ret != 0) {
    		fprintf(stderr,
                    "insmod: init_module '%s' failed (%s)\n",
                    argv[1], strerror(errno));
    	}
    
    	/* free the file buffer */
    	free(file);
    
    	return ret;
    }