int main() { int action; double *pointer; while(1) { show_menu(); scanf("%d", &action); switch(action) { case 0: exit(0); break; case 1: pointer = allocate_memory(); break; case 2: fill_memory(pointer); break; case 3: print_memory(pointer); break; case 4: free(pointer); break; } } }
int SHMBase::connect_shared_memory( char mAllocate ) { bool available = is_IPC_memory_available(); if (!available) { if (mAllocate) { int result = allocate_memory( ); if (result == -1) { Dprintf("Cannot allocate shared memory!\n"); } attach_memory( ); fill_memory ( ); save_segment_id( ); return 1; } } else { attach_memory(); if (is_poiner_valid()==true) return 1; } return 0; }
struct mars* create_mars(unsigned short size_memory, unsigned int max_cycle, struct instruction* initial_instruction) { struct mars* mars = NULL; mars = malloc(sizeof(struct mars)); if(mars == NULL) { return NULL; } mars->memory = malloc(sizeof(struct instruction) * size_memory); if(mars->memory == NULL) { free(mars); return NULL; } mars->max_cycle = max_cycle; mars->current_cycle = 0; mars->size_memory = size_memory; mars->size_a_warrior = 0; mars->a_warrior = NULL; if(initial_instruction != NULL) { fill_memory(mars->memory, mars->size_memory, initial_instruction); } else { randomize_memory(mars); } return mars; }
static void touch_mem (guint64 block_size, guint64 n_blocks, guint64 repeats) { guint64 j, accu, n = n_blocks; GTimer *timer; guint **memc; guint **memb; guint **mema = g_new (guint*, n); for (j = 0; j < n; j++) mema[j] = g_slice_alloc (block_size); memb = g_new (guint*, n); for (j = 0; j < n; j++) memb[j] = g_slice_alloc (block_size); memc = g_new (guint*, n); for (j = 0; j < n; j++) memc[j] = g_slice_alloc (block_size); timer = g_timer_new(); fill_memory (mema, n, 2); fill_memory (memb, n, 3); fill_memory (memc, n, 4); access_memory3 (mema, memb, memc, n, 3); g_timer_start (timer); accu = access_memory3 (mema, memb, memc, n, repeats); g_timer_stop (timer); g_print ("Access-time = %fs\n", g_timer_elapsed (timer, NULL)); g_assert (accu / repeats == (2 + 3) * n / 2 + 4 * n / 2); for (j = 0; j < n; j++) { g_slice_free1 (block_size, mema[j]); g_slice_free1 (block_size, memb[j]); g_slice_free1 (block_size, memc[j]); } g_timer_destroy (timer); g_free (mema); g_free (memb); g_free (memc); }
TEST(MemoryManager, SimpleAllocation){ const size_t size = 1024; auto mm = std::make_shared<m3bp::MemoryManager>(); EXPECT_EQ(0u, mm->total_memory_usage()); { auto mr0 = mm->allocate(size); EXPECT_EQ(size, mm->total_memory_usage()); { auto locked_mr0 = mr0.lock(); EXPECT_NE(nullptr, locked_mr0.pointer()); fill_memory(locked_mr0.pointer(), size); } auto mr1 = mr0; mr0 = m3bp::MemoryReference(); EXPECT_EQ(size, mm->total_memory_usage()); } EXPECT_EQ(0u, mm->total_memory_usage()); }
int main() { int action; char **pointer; pointer = malloc(5 * sizeof(char *)); pointer[0] = "asd"; pointer[1] = "123"; pointer[2] = "lald"; pointer[3] = "mnmn"; pointer[4] = END_OF_ARRAY; while(1) { show_menu(); scanf("%d", &action); switch(action) { case 0: exit(0); break; case 1: pointer = allocate_memory(); break; case 2: fill_memory(pointer); break; case 3: replace_memory(pointer); break; case 4: reverse_array(pointer); break; case 5: break; case 6: print_memory(pointer); break; } } }
int main(void) { TEST_NULL_ARG(BLKBSZGET); TEST_NULL_ARG(BLKBSZSET); TEST_NULL_ARG(BLKFRAGET); TEST_NULL_ARG(BLKGETSIZE); TEST_NULL_ARG(BLKGETSIZE64); TEST_NULL_ARG(BLKPG); TEST_NULL_ARG(BLKRAGET); TEST_NULL_ARG(BLKROGET); TEST_NULL_ARG(BLKROSET); TEST_NULL_ARG(BLKSECTGET); TEST_NULL_ARG(BLKSECTGET); TEST_NULL_ARG(BLKSSZGET); #ifdef BLKALIGNOFF TEST_NULL_ARG(BLKALIGNOFF); #endif #ifdef BLKDISCARD TEST_NULL_ARG(BLKDISCARD); #endif #ifdef BLKDISCARDZEROES TEST_NULL_ARG(BLKDISCARDZEROES); #endif #ifdef BLKIOMIN TEST_NULL_ARG(BLKIOMIN); #endif #ifdef BLKIOOPT TEST_NULL_ARG(BLKIOOPT); #endif #ifdef BLKPBSZGET TEST_NULL_ARG(BLKPBSZGET); #endif #ifdef BLKROTATIONAL TEST_NULL_ARG(BLKROTATIONAL); #endif #ifdef BLKSECDISCARD TEST_NULL_ARG(BLKSECDISCARD); #endif #ifdef BLKZEROOUT TEST_NULL_ARG(BLKZEROOUT); #endif #if defined BLKTRACESETUP && defined HAVE_STRUCT_BLK_USER_TRACE_SETUP TEST_NULL_ARG(BLKTRACESETUP); #endif ioctl(-1, BLKRASET, lmagic); printf("ioctl(-1, BLKRASET, %lu) = -1 EBADF (%m)\n", lmagic); ioctl(-1, BLKFRASET, lmagic); printf("ioctl(-1, BLKFRASET, %lu) = -1 EBADF (%m)\n", lmagic); int *const val_int = tail_alloc(sizeof(*val_int)); *val_int = magic; ioctl(-1, BLKROSET, val_int); printf("ioctl(-1, BLKROSET, [%d]) = -1 EBADF (%m)\n", *val_int); ioctl(-1, BLKBSZSET, val_int); printf("ioctl(-1, BLKBSZSET, [%d]) = -1 EBADF (%m)\n", *val_int); uint64_t *pair_int64 = tail_alloc(sizeof(*pair_int64) * 2); pair_int64[0] = 0xdeadbeefbadc0dedULL; pair_int64[1] = 0xfacefeedcafef00dULL; #ifdef BLKDISCARD ioctl(-1, BLKDISCARD, pair_int64); printf("ioctl(-1, BLKDISCARD, [%" PRIu64 ", %" PRIu64 "])" " = -1 EBADF (%m)\n", pair_int64[0], pair_int64[1]); #endif #ifdef BLKSECDISCARD ioctl(-1, BLKSECDISCARD, pair_int64); printf("ioctl(-1, BLKSECDISCARD, [%" PRIu64 ", %" PRIu64 "])" " = -1 EBADF (%m)\n", pair_int64[0], pair_int64[1]); #endif #ifdef BLKZEROOUT ioctl(-1, BLKZEROOUT, pair_int64); printf("ioctl(-1, BLKZEROOUT, [%" PRIu64 ", %" PRIu64 "])" " = -1 EBADF (%m)\n", pair_int64[0], pair_int64[1]); #endif struct blkpg_ioctl_arg *const blkpg = tail_alloc(sizeof(*blkpg)); blkpg->op = 3; blkpg->flags = 0xdeadbeef; blkpg->datalen = 0xbadc0ded; blkpg->data = (void *) (unsigned long) 0xcafef00dfffffeedULL; ioctl(-1, BLKPG, blkpg); printf("ioctl(-1, BLKPG, {%s, flags=%d, datalen=%d" ", data=%#lx}) = -1 EBADF (%m)\n", "BLKPG_RESIZE_PARTITION", blkpg->flags, blkpg->datalen, (unsigned long) blkpg->data); struct blkpg_partition *const bp = tail_alloc(sizeof(*bp)); bp->start = 0xfac1fed2dad3bef4ULL; bp->length = 0xfac5fed6dad7bef8ULL; bp->pno = magic; memset(bp->devname, 'A', sizeof(bp->devname)); memset(bp->volname, 'B', sizeof(bp->volname)); blkpg->op = 1; blkpg->data = bp; ioctl(-1, BLKPG, blkpg); printf("ioctl(-1, BLKPG, {%s, flags=%d, datalen=%d" ", data={start=%lld, length=%lld, pno=%d" ", devname=\"%.*s\", volname=\"%.*s\"}})" " = -1 EBADF (%m)\n", "BLKPG_ADD_PARTITION", blkpg->flags, blkpg->datalen, bp->start, bp->length, bp->pno, (int) sizeof(bp->devname) - 1, bp->devname, (int) sizeof(bp->volname) - 1, bp->volname); #if defined BLKTRACESETUP && defined HAVE_STRUCT_BLK_USER_TRACE_SETUP struct blk_user_trace_setup *const buts = tail_alloc(sizeof(*buts)); fill_memory(buts, sizeof(*buts)); ioctl(-1, BLKTRACESETUP, buts); printf("ioctl(-1, BLKTRACESETUP, {act_mask=%hu, buf_size=%u, buf_nr=%u" ", start_lba=%" PRI__u64 ", end_lba=%" PRI__u64 ", pid=%u})" " = -1 EBADF (%m)\n", buts->act_mask, buts->buf_size, buts->buf_nr, buts->start_lba, buts->end_lba, buts->pid); #endif unsigned int i; for (i = 0; i < ARRAY_SIZE(block_argless); ++i) { ioctl(-1, (unsigned long) block_argless[i].val, lmagic); printf("ioctl(-1, %s) = -1 EBADF (%m)\n", block_argless[i].str); } ioctl(-1, _IOC(_IOC_READ, 0x12, 0xfe, 0xff), lmagic); printf("ioctl(-1, %s, %#lx) = -1 EBADF (%m)\n", "_IOC(_IOC_READ, 0x12, 0xfe, 0xff)", lmagic); puts("+++ exited with 0 +++"); return 0; }
int main(void) { TEST_NULL_ARG(EVIOCGVERSION); TEST_NULL_ARG(EVIOCGEFFECTS); TEST_NULL_ARG(EVIOCGID); TEST_NULL_ARG(EVIOCGKEYCODE); TEST_NULL_ARG(EVIOCSKEYCODE); TEST_NULL_ARG(EVIOCSFF); # ifdef EVIOCGKEYCODE_V2 TEST_NULL_ARG(EVIOCGKEYCODE_V2); # endif # ifdef EVIOCSKEYCODE_V2 TEST_NULL_ARG(EVIOCSKEYCODE_V2); # endif # ifdef EVIOCGREP TEST_NULL_ARG(EVIOCGREP); # endif # ifdef EVIOCSREP TEST_NULL_ARG(EVIOCSREP); # endif # ifdef EVIOCSCLOCKID TEST_NULL_ARG(EVIOCSCLOCKID); # endif TEST_NULL_ARG(EVIOCGNAME(0)); TEST_NULL_ARG(EVIOCGPHYS(0)); TEST_NULL_ARG(EVIOCGUNIQ(0)); TEST_NULL_ARG(EVIOCGKEY(0)); TEST_NULL_ARG(EVIOCGLED(0)); # ifdef EVIOCGMTSLOTS TEST_NULL_ARG(EVIOCGMTSLOTS(0)); # endif # ifdef EVIOCGPROP TEST_NULL_ARG(EVIOCGPROP(0)); # endif TEST_NULL_ARG(EVIOCGSND(0)); # ifdef EVIOCGSW TEST_NULL_ARG(EVIOCGSW(0)); # endif TEST_NULL_ARG(EVIOCGABS(ABS_X)); TEST_NULL_ARG(EVIOCSABS(ABS_X)); TEST_NULL_ARG(EVIOCGBIT(EV_SYN, 0)); TEST_NULL_ARG(EVIOCGBIT(EV_KEY, 1)); TEST_NULL_ARG(EVIOCGBIT(EV_REL, 2)); TEST_NULL_ARG(EVIOCGBIT(EV_ABS, 3)); TEST_NULL_ARG(EVIOCGBIT(EV_MSC, 4)); # ifdef EV_SW TEST_NULL_ARG(EVIOCGBIT(EV_SW, 5)); # endif TEST_NULL_ARG(EVIOCGBIT(EV_LED, 6)); TEST_NULL_ARG(EVIOCGBIT(EV_SND, 7)); TEST_NULL_ARG(EVIOCGBIT(EV_REP, 8)); TEST_NULL_ARG(EVIOCGBIT(EV_FF, 9)); TEST_NULL_ARG(EVIOCGBIT(EV_PWR, 10)); TEST_NULL_ARG(EVIOCGBIT(EV_FF_STATUS, 11)); ioctl(-1, EVIOCGBIT(EV_MAX, 42), 0); printf("ioctl(-1, EVIOCGBIT(%#x /* EV_??? */, 42), NULL)" " = -1 EBADF (%m)\n", EV_MAX); ioctl(-1, EVIOCRMFF, lmagic); printf("ioctl(-1, EVIOCRMFF, %d) = -1 EBADF (%m)\n", (int) lmagic); ioctl(-1, EVIOCGRAB, lmagic); printf("ioctl(-1, EVIOCGRAB, %lu) = -1 EBADF (%m)\n", lmagic); # ifdef EVIOCREVOKE ioctl(-1, EVIOCREVOKE, lmagic); printf("ioctl(-1, EVIOCREVOKE, %lu) = -1 EBADF (%m)\n", lmagic); # endif const unsigned int size = get_page_size(); void *const page = tail_alloc(size); fill_memory(page, size); int *const val_int = tail_alloc(sizeof(*val_int)); *val_int = magic; # ifdef EVIOCSCLOCKID ioctl(-1, EVIOCSCLOCKID, val_int); printf("ioctl(-1, EVIOCSCLOCKID, [%u]) = -1 EBADF (%m)\n", *val_int); # endif int *pair_int = tail_alloc(sizeof(*pair_int) * 2); pair_int[0] = 0xdeadbeef; pair_int[1] = 0xbadc0ded; # ifdef EVIOSGREP ioctl(-1, EVIOCSREP, pair_int); printf("ioctl(-1, EVIOCSREP, [%u, %u]) = -1 EBADF (%m)\n", pair_int[0], pair_int[1]); # endif pair_int[1] = 1; ioctl(-1, EVIOCSKEYCODE, pair_int); printf("ioctl(-1, EVIOCSKEYCODE, [%u, %s]) = -1 EBADF (%m)\n", pair_int[0], "KEY_ESC"); # ifdef EVIOCSKEYCODE_V2 struct input_keymap_entry *const ike = tail_alloc(sizeof(*ike)); fill_memory(ike, sizeof(*ike)); ike->keycode = 2; ioctl(-1, EVIOCSKEYCODE_V2, ike); printf("ioctl(-1, EVIOCSKEYCODE_V2, {flags=%" PRIu8 ", len=%" PRIu8 ", ", ike->flags, ike->len); # if VERBOSE printf("index=%" PRIu16 ", keycode=%s, scancode=[", ike->index, "KEY_1"); unsigned int i; for (i = 0; i < ARRAY_SIZE(ike->scancode); ++i) { if (i > 0) printf(", "); printf("%" PRIx8, ike->scancode[i]); } printf("]"); # else printf("..."); # endif errno = EBADF; printf("}) = -1 EBADF (%m)\n"); # endif struct ff_effect *const ffe = tail_alloc(sizeof(*ffe)); fill_memory(ffe, sizeof(*ffe)); ffe->type = FF_CONSTANT; ioctl(-1, EVIOCSFF, ffe); print_ffe_common(ffe, "FF_CONSTANT"); # if VERBOSE printf(", constant={level=%hd", ffe->u.constant.level); print_envelope(&ffe->u.constant.envelope); printf("}"); # else printf("..."); # endif errno = EBADF; printf("}) = -1 EBADF (%m)\n"); # if VERBOSE ffe->type = FF_RAMP; ioctl(-1, EVIOCSFF, ffe); print_ffe_common(ffe, "FF_RAMP"); printf(", ramp={start_level=%hd, end_level=%hd", ffe->u.ramp.start_level, ffe->u.ramp.end_level); print_envelope(&ffe->u.ramp.envelope); errno = EBADF; printf("}}) = -1 EBADF (%m)\n"); ffe->type = FF_PERIODIC; ioctl(-1, EVIOCSFF, ffe); print_ffe_common(ffe, "FF_PERIODIC"); printf(", periodic={waveform=%hu, period=%hu, magnitude=%hd" ", offset=%hd, phase=%hu", ffe->u.periodic.waveform, ffe->u.periodic.period, ffe->u.periodic.magnitude, ffe->u.periodic.offset, ffe->u.periodic.phase); print_envelope(&ffe->u.periodic.envelope); printf(", custom_len=%u, custom_data=%p}", ffe->u.periodic.custom_len, ffe->u.periodic.custom_data); errno = EBADF; printf("}) = -1 EBADF (%m)\n"); ffe->type = FF_RUMBLE; ioctl(-1, EVIOCSFF, ffe); print_ffe_common(ffe, "FF_RUMBLE"); printf(", rumble={strong_magnitude=%hu, weak_magnitude=%hu}", ffe->u.rumble.strong_magnitude, ffe->u.rumble.weak_magnitude); errno = EBADF; printf("}) = -1 EBADF (%m)\n"); ffe->type = 0xff; ioctl(-1, EVIOCSFF, ffe); print_ffe_common(ffe, "0xff /* FF_??? */"); errno = EBADF; printf("}) = -1 EBADF (%m)\n"); # endif ioctl(-1, _IOC(_IOC_READ, 0x45, 0x1, 0xff), lmagic); printf("ioctl(-1, %s, %#lx) = -1 EBADF (%m)\n", "_IOC(_IOC_READ, 0x45, 0x1, 0xff)", lmagic); ioctl(-1, _IOC(_IOC_WRITE, 0x45, 0x1, 0xff), lmagic); printf("ioctl(-1, %s, %#lx) = -1 EBADF (%m)\n", "_IOC(_IOC_WRITE, 0x45, 0x1, 0xff)", lmagic); ioctl(-1, _IOC(_IOC_READ|_IOC_WRITE, 0x45, 0xfe, 0xff), lmagic); printf("ioctl(-1, %s, %#lx) = -1 EBADF (%m)\n", "_IOC(_IOC_READ|_IOC_WRITE, 0x45, 0xfe, 0xff)", lmagic); ioctl(-1, _IOC(_IOC_READ|_IOC_WRITE, 0x45, 0, 0), lmagic); printf("ioctl(-1, %s, %#lx) = -1 EBADF (%m)\n", "_IOC(_IOC_READ|_IOC_WRITE, 0x45, 0, 0)", lmagic); puts("+++ exited with 0 +++"); return 0; }
int main(void) { static const kernel_ulong_t unknown_loop_cmd = (kernel_ulong_t) 0xbadc0dedfeed4cedULL; static const kernel_ulong_t magic = (kernel_ulong_t) 0xdeadbeefbadc0dedULL; static const kernel_ulong_t kernel_mask = ((kernel_ulong_t) -1) - ((unsigned long) -1L); TAIL_ALLOC_OBJECT_CONST_PTR(struct loop_info, info); TAIL_ALLOC_OBJECT_CONST_PTR(struct loop_info64, info64); /* Unknown loop commands */ ioctl(-1, unknown_loop_cmd, magic); printf("ioctl(-1, _IOC(_IOC_READ|_IOC_WRITE%s, 0x4c, %#x, %#x), " "%#lx) = -1 EBADF (%m)\n", _IOC_DIR((unsigned int) unknown_loop_cmd) & _IOC_NONE ? "|_IOC_NONE" : "", _IOC_NR((unsigned int) unknown_loop_cmd), _IOC_SIZE((unsigned int) unknown_loop_cmd), (unsigned long) magic); ioctl(-1, LOOP_SET_BLOCK_SIZE + 1, magic); printf("ioctl(-1, _IOC(0, 0x4c, %#x, %#x), %#lx) = " "-1 EBADF (%m)\n", _IOC_NR(LOOP_SET_BLOCK_SIZE + 1), _IOC_SIZE(LOOP_SET_BLOCK_SIZE + 1), (unsigned long) magic); ioctl(-1, LOOP_CTL_GET_FREE + 1, magic); printf("ioctl(-1, _IOC(0, 0x4c, %#x, %#x), %#lx) = " "-1 EBADF (%m)\n", _IOC_NR(LOOP_CTL_GET_FREE + 1), _IOC_SIZE(LOOP_CTL_GET_FREE + 1), (unsigned long) magic); /* LOOP_SET_FD */ ioctl(-1, LOOP_SET_FD, magic); printf("ioctl(-1, LOOP_SET_FD, %d) = -1 EBADF (%m)\n", (unsigned int) magic); /* LOOP_CLR_FD */ ioctl(-1, LOOP_CLR_FD); printf("ioctl(-1, LOOP_CLR_FD) = -1 EBADF (%m)\n"); /* LOOP_SET_STATUS */ ioctl(-1, LOOP_SET_STATUS, NULL); printf("ioctl(-1, LOOP_SET_STATUS, NULL) = -1 EBADF (%m)\n"); fill_memory(info, sizeof(*info)); info->lo_flags = 0xdeface00; info->lo_name[0] = '\0'; info->lo_encrypt_key[0] = '\0'; info->lo_encrypt_key_size = 1; printf("ioctl(-1, LOOP_SET_STATUS, "); print_loop_info(info, true, NULL, "\\0", NULL); ioctl(-1, LOOP_SET_STATUS, info); printf(") = -1 EBADF (%m)\n"); fill_memory(info, sizeof(*info)); info->lo_encrypt_type = LO_CRYPT_NONE; info->lo_flags = LO_FLAGS_READ_ONLY; memset(info->lo_name, 'A', sizeof(info->lo_name)); memset(info->lo_encrypt_key, 'B', sizeof(info->lo_encrypt_key)); ioctl(-1, LOOP_SET_STATUS, (void *) info + ALIGNOF(info)); printf("ioctl(-1, LOOP_SET_STATUS, %p) = -1 EBADF (%m)\n", (void *) info + ALIGNOF(info)); printf("ioctl(-1, LOOP_SET_STATUS, "); print_loop_info(info, false, "LO_CRYPT_NONE", NULL, "LO_FLAGS_READ_ONLY"); ioctl(-1, LOOP_SET_STATUS, info); printf(") = -1 EBADF (%m)\n"); /* LOOP_GET_STATUS */ ioctl(-1, LOOP_GET_STATUS, NULL); printf("ioctl(-1, LOOP_GET_STATUS, NULL) = -1 EBADF (%m)\n"); ioctl(-1, LOOP_GET_STATUS, (unsigned long) info | kernel_mask); printf("ioctl(-1, LOOP_GET_STATUS, %p) = -1 EBADF (%m)\n", info); /* LOOP_SET_STATUS64 */ ioctl(-1, LOOP_SET_STATUS64, NULL); printf("ioctl(-1, LOOP_SET_STATUS64, NULL) = -1 EBADF (%m)\n"); fill_memory(info64, sizeof(*info64)); info64->lo_flags = 0xdec0de00; info64->lo_file_name[0] = '\0'; info64->lo_crypt_name[0] = '\0'; info64->lo_encrypt_key[0] = '\0'; info64->lo_encrypt_key_size = 1; printf("ioctl(-1, LOOP_SET_STATUS64, "); print_loop_info64(info64, true, NULL, "\\0", NULL); ioctl(-1, LOOP_SET_STATUS64, info64); printf(") = -1 EBADF (%m)\n"); fill_memory(info64, sizeof(*info64)); info64->lo_flags = LO_FLAGS_READ_ONLY; info64->lo_encrypt_type = LO_CRYPT_NONE; memset(info64->lo_file_name, 'C', sizeof(info64->lo_file_name)); memset(info64->lo_crypt_name, 'D', sizeof(info64->lo_crypt_name)); memset(info64->lo_encrypt_key, 'E', sizeof(info64->lo_encrypt_key)); ioctl(-1, LOOP_SET_STATUS64, (void *) info64 + ALIGNOF(info64)); printf("ioctl(-1, LOOP_SET_STATUS64, %p) = -1 EBADF (%m)\n", (void *) info64 + ALIGNOF(info64)); printf("ioctl(-1, LOOP_SET_STATUS64, "); print_loop_info64(info64, false, "LO_CRYPT_NONE", NULL, "LO_FLAGS_READ_ONLY"); ioctl(-1, LOOP_SET_STATUS64, info64); printf(") = -1 EBADF (%m)\n"); /* LOOP_GET_STATUS64 */ ioctl(-1, LOOP_GET_STATUS64, NULL); printf("ioctl(-1, LOOP_GET_STATUS64, NULL) = -1 EBADF (%m)\n"); ioctl(-1, LOOP_GET_STATUS64, (unsigned long) info64 | kernel_mask); printf("ioctl(-1, LOOP_GET_STATUS64, %p) = -1 EBADF (%m)\n", info64); /* LOOP_CHANGE_FD */ ioctl(-1, LOOP_CHANGE_FD, magic); printf("ioctl(-1, LOOP_CHANGE_FD, %d) = -1 EBADF (%m)\n", (unsigned int) magic); /* LOOP_SET_CAPACITY */ ioctl(-1, LOOP_SET_CAPACITY); printf("ioctl(-1, LOOP_SET_CAPACITY) = -1 EBADF (%m)\n"); /* LOOP_SET_DIRECT_IO */ ioctl(-1, LOOP_SET_DIRECT_IO, magic); printf("ioctl(-1, LOOP_SET_DIRECT_IO, %lu) = -1 EBADF (%m)\n", (unsigned long) magic); /* LOOP_SET_BLOCK_SIZE */ ioctl(-1, LOOP_SET_BLOCK_SIZE, magic); printf("ioctl(-1, LOOP_SET_BLOCK_SIZE, %lu) = -1 EBADF (%m)\n", (unsigned long) magic); /* LOOP_CTL_ADD */ ioctl(-1, LOOP_CTL_ADD, magic); printf("ioctl(-1, LOOP_CTL_ADD, %d) = -1 EBADF (%m)\n", (unsigned int) magic); /* LOOP_CTL_REMOVE */ ioctl(-1, LOOP_CTL_REMOVE, magic); printf("ioctl(-1, LOOP_CTL_REMOVE, %d) = -1 EBADF (%m)\n", (unsigned int) magic); /* LOOP_CTL_GET_FREE */ ioctl(-1, LOOP_CTL_GET_FREE); printf("ioctl(-1, LOOP_CTL_GET_FREE) = -1 EBADF (%m)\n"); puts("+++ exited with 0 +++"); return 0; }
/*! * Allocate memory for atleast size bytes. * * @param size size of memory in bytes * @return pointer to memory if ok NULL if out of memory */ void* allocate_memory( int size ) { struct Memory_handler* loop = NULL; struct Memory_handler* best = NULL; int waste; loop = MEM_HANDLE; waste = loop->size - size; while ( 1 ) { /* do we have free memory? */ if ( loop->used == 0) { /* we are wasting memory here, but why not ,) */ if (loop->size >= size + 2*DEBUG_BUFFER_BORDER) { if (best == NULL || loop->size - size -2* DEBUG_BUFFER_BORDER< waste) { best = loop; waste = loop->size - size; } } } if (loop->next == NULL) break; loop = loop->next; } /* and loop is pointer to last node */ /* ok check did we find one */ if (best == NULL) { if (DEBUG > 1) { printf("(II) MemH: did not found match, allocating new (%d) \n", size); } /* noup, we need to alloc memory */ /* if this node is in use, create new node */ if (loop->used != -1) { loop->next = malloc (sizeof( struct Memory_handler ) ); if (loop->next == NULL) return NULL; loop = loop->next; } loop->mem = malloc( size + 2*DEBUG_BUFFER_BORDER); loop->size = size + 2 * DEBUG_BUFFER_BORDER; loop->used = 1; loop->next = NULL; #ifdef DEBUG_MEMORY fill_memory(loop->mem ); fill_memory(loop->mem + size + DEBUG_BUFFER_BORDER); loop->true_size = size; #endif return DEBUG_BUFFER_BORDER + loop->mem ; } else { if (DEBUG > 1) { printf("(II) MemH: Found mathc memory from %p waste %d!\n", best, waste); } best->used = 1; #ifdef DEBUG_MEMORY fill_memory(best->mem ); fill_memory(best->mem + size + DEBUG_BUFFER_BORDER); best->true_size = size; #endif return best->mem + DEBUG_BUFFER_BORDER; } }
int main(void) { ioctl(-1, SG_IO, 0); printf("ioctl(-1, SG_IO, NULL) = -1 EBADF (%m)\n"); struct sg_io_hdr *const sg_io = tail_alloc(sizeof(*sg_io)); fill_memory(sg_io, sizeof(*sg_io)); const void *const efault = sg_io + 1; ioctl(-1, SG_IO, efault); printf("ioctl(-1, SG_IO, %p) = -1 EBADF (%m)\n", efault); ioctl(-1, SG_IO, sg_io); printf("ioctl(-1, SG_IO, [%u]) = -1 EBADF (%m)\n", sg_io->interface_id); unsigned int *const piid = tail_alloc(sizeof(*piid)); *piid = (unsigned char) 'S'; ioctl(-1, SG_IO, piid); printf("ioctl(-1, SG_IO, {interface_id='S', %p}) = -1 EBADF (%m)\n", piid + 1); sg_io->interface_id = (unsigned char) 'S'; sg_io->dxfer_direction = -2; sg_io->flags = -1U; sg_io->info = -1U; sg_io->dxferp = (void *) (unsigned long) 0xfacefeedfffffff1ULL; sg_io->cmdp = (void *) (unsigned long) 0xfacefeedfffffff2ULL; sg_io->sbp = (void *) (unsigned long) 0xfacefeedfffffff3ULL; ioctl(-1, SG_IO, sg_io); printf("ioctl(-1, SG_IO, {interface_id='S'" ", dxfer_direction=SG_DXFER_TO_DEV" ", cmd_len=%u" ", cmdp=%p" ", mx_sb_len=%u" ", iovec_count=%u" ", dxfer_len=%u" ", timeout=%u" ", flags=SG_FLAG_DIRECT_IO|SG_FLAG_UNUSED_LUN_INHIBIT" "|SG_FLAG_MMAP_IO|SG_FLAG_NO_DXFER" "|SG_FLAG_Q_AT_TAIL|SG_FLAG_Q_AT_HEAD|0xfffeffc8" ", dxferp=%p" ", status=%#x" ", masked_status=%#x" ", msg_status=%#x" ", sb_len_wr=%u" ", sbp=%p" ", host_status=%#x" ", driver_status=%#x" ", resid=%d" ", duration=%u" ", info=SG_INFO_CHECK|SG_INFO_DIRECT_IO|SG_INFO_MIXED_IO|0xfffffff8" "}) = -1 EBADF (%m)\n", sg_io->cmd_len, sg_io->cmdp, sg_io->mx_sb_len, sg_io->iovec_count, sg_io->dxfer_len, sg_io->timeout, sg_io->dxferp, sg_io->status, sg_io->masked_status, sg_io->msg_status, sg_io->sb_len_wr, sg_io->sbp, sg_io->host_status, sg_io->driver_status, sg_io->resid, sg_io->duration); sg_io->dxfer_direction = -3; ioctl(-1, SG_IO, sg_io); printf("ioctl(-1, SG_IO, {interface_id='S'" ", dxfer_direction=SG_DXFER_FROM_DEV" ", cmd_len=%u" ", cmdp=%p" ", mx_sb_len=%u" ", iovec_count=%u" ", dxfer_len=%u" ", timeout=%u" ", flags=SG_FLAG_DIRECT_IO|SG_FLAG_UNUSED_LUN_INHIBIT" "|SG_FLAG_MMAP_IO|SG_FLAG_NO_DXFER" "|SG_FLAG_Q_AT_TAIL|SG_FLAG_Q_AT_HEAD|0xfffeffc8" ", dxferp=%p" ", status=%#x" ", masked_status=%#x" ", msg_status=%#x" ", sb_len_wr=%u" ", sbp=%p" ", host_status=%#x" ", driver_status=%#x" ", resid=%d" ", duration=%u" ", info=SG_INFO_CHECK|SG_INFO_DIRECT_IO|SG_INFO_MIXED_IO|0xfffffff8" "}) = -1 EBADF (%m)\n", sg_io->cmd_len, sg_io->cmdp, sg_io->mx_sb_len, sg_io->iovec_count, sg_io->dxfer_len, sg_io->timeout, sg_io->dxferp, sg_io->status, sg_io->masked_status, sg_io->msg_status, sg_io->sb_len_wr, sg_io->sbp, sg_io->host_status, sg_io->driver_status, sg_io->resid, sg_io->duration); const struct iovec iov[] = { { .iov_base = (void *) efault - 2, .iov_len = 2 }, { .iov_base = (void *) efault - 3,