int init_module(address_t sct, address_t func) { int ret, ret2; address_t old_syscall; /* backup old system call, install kmalloc as system call */ ret = read_syscall(sct, __NR_INIT_MODULE, &old_syscall); if (ret < 0) { fprintf(stderr, "jammod: failed to read syscall %u: %s\n", __NR_INIT_MODULE, strerror(errno)); return 0; } ret = write_syscall(sct, __NR_INIT_MODULE, func); if (ret < 0) { fprintf(stderr, "jammod: failed to read syscall %u: %s\n", __NR_INIT_MODULE, strerror(errno)); return 0; } /* do it */ ret2 = INIT_MODULE(); /* restore old system call */ ret = write_syscall(sct, __NR_INIT_MODULE, old_syscall); if (ret < 0) { fprintf(stderr, "jammod: failed to restore syscall %u: %s\n", __NR_INIT_MODULE, strerror(errno)); } return ret2; }
int init_config(void) { INIT_MODULE(him_odin); INIT_MODULE(vdev_raw); INIT_MODULE(partition); INIT_MODULE(raid0); INIT_MODULE(raid1); INIT_MODULE(raid5); INIT_MODULE(jbod); return 0; }