Lines Matching +full:sig +full:- +full:dir
2 * os-posix-lib.c
4 * Copyright (c) 2003-2008 Fabrice Bellard
37 #include "qemu/error-report.h"
44 #include "qemu/thread-context.h"
45 #include "qemu/main-loop.h"
61 #include "qemu/mmap-alloc.h"
114 int qemu_kill_thread(int tid, int sig) in qemu_kill_thread() argument
117 return syscall(__NR_tgkill, getpid(), tid, sig); in qemu_kill_thread()
119 return thr_kill2(getpid(), tid, sig); in qemu_kill_thread()
121 return _lwp_kill(tid, sig); in qemu_kill_thread()
123 return thrkill(tid, sig, NULL); in qemu_kill_thread()
125 return kill(tid, sig); in qemu_kill_thread()
148 if (fd == -1) { in qemu_write_pidfile()
213 void *ptr = qemu_ram_mmap(-1, size, align, qemu_map_flags, 0); in qemu_anon_ram_alloc()
230 qemu_ram_munmap(-1, ptr, size); in qemu_anon_ram_free()
240 return g_unix_set_fd_nonblocking(fd, true, NULL) ? 0 : -errno; in qemu_socket_try_set_nonblock()
266 assert(f != -1); in qemu_set_cloexec()
268 assert(f != -1); in qemu_set_cloexec()
277 if (ret != -1 || errno != EINVAL) { in qemu_socketpair()
320 for (i = 0; i < sigbus_memset_context->num_threads; i++) { in sigbus_handler()
321 MemsetThread *thread = &sigbus_memset_context->threads[i]; in sigbus_handler()
323 if (qemu_thread_is_self(&thread->pgthread)) { in sigbus_handler()
324 siglongjmp(thread->env, 1); in sigbus_handler()
362 while (!memset_args->context->all_threads_created) { in do_touch_pages()
372 if (sigsetjmp(memset_args->env, 1)) { in do_touch_pages()
373 ret = -EFAULT; in do_touch_pages()
375 char *addr = memset_args->addr; in do_touch_pages()
376 size_t numpages = memset_args->numpages; in do_touch_pages()
377 size_t hpagesize = memset_args->hpagesize; in do_touch_pages()
386 * to a no-op in do_touch_pages()
399 const size_t size = memset_args->numpages * memset_args->hpagesize; in do_madv_populate_write_pages()
400 char * const addr = memset_args->addr; in do_madv_populate_write_pages()
405 while (!memset_args->context->all_threads_created) { in do_madv_populate_write_pages()
411 ret = -errno; in do_madv_populate_write_pages()
439 for (i = 0; i < context->num_threads; i++) { in wait_and_free_mem_prealloc_context()
440 tmp = (uintptr_t)qemu_thread_join(&context->threads[i].pgthread); in wait_and_free_mem_prealloc_context()
446 g_free(context->threads); in wait_and_free_mem_prealloc_context()
470 context->num_threads = in touch_all_pages()
484 if (context->num_threads == 1 && !async) { in touch_all_pages()
488 ret = -errno; in touch_all_pages()
498 context->threads = g_new0(MemsetThread, context->num_threads); in touch_all_pages()
499 numpages_per_thread = numpages / context->num_threads; in touch_all_pages()
500 leftover = numpages % context->num_threads; in touch_all_pages()
501 for (i = 0; i < context->num_threads; i++) { in touch_all_pages()
502 context->threads[i].addr = addr; in touch_all_pages()
503 context->threads[i].numpages = numpages_per_thread + (i < leftover); in touch_all_pages()
504 context->threads[i].hpagesize = hpagesize; in touch_all_pages()
505 context->threads[i].context = context; in touch_all_pages()
507 thread_context_create_thread(tc, &context->threads[i].pgthread, in touch_all_pages()
509 touch_fn, &context->threads[i], in touch_all_pages()
512 qemu_thread_create(&context->threads[i].pgthread, "touch_pages", in touch_all_pages()
513 touch_fn, &context->threads[i], in touch_all_pages()
516 addr += context->threads[i].numpages * hpagesize; in touch_all_pages()
534 context->all_threads_created = true; in touch_all_pages()
559 context->all_threads_created = true; in qemu_finish_async_prealloc_mem()
573 error_setg_errno(errp, -ret, in qemu_finish_async_prealloc_mem()
632 error_setg_errno(errp, -ret, in qemu_prealloc_mem()
658 name = g_strdup(proc->ki_comm); in qemu_get_pid_name()
704 ptr = mmap(NULL, *sz, PROT_READ | PROT_WRITE, flags, -1, 0); in qemu_alloc_stack()
710 /* Stack grows down -- guard page at the bottom. */ in qemu_alloc_stack()
741 usage = sz - (uintptr_t) (ptr - stack); in qemu_free_stack()
756 * used to set the handler is a cfi-valid pointer. Since the handlers are
757 * stored in kernel memory, changing the handler to an attacker-defined
766 si.si_signo = info->ssi_signo; in sigaction_invoke()
767 si.si_errno = info->ssi_errno; in sigaction_invoke()
768 si.si_code = info->ssi_code; in sigaction_invoke()
771 * Positive si_code values are reserved for kernel-generated in sigaction_invoke()
777 if (info->ssi_code == SI_USER || info->ssi_code == SI_QUEUE || in sigaction_invoke()
778 info->ssi_code <= 0) { in sigaction_invoke()
780 si.si_pid = info->ssi_pid; in sigaction_invoke()
781 si.si_uid = info->ssi_uid; in sigaction_invoke()
782 } else if (info->ssi_signo == SIGILL || info->ssi_signo == SIGFPE || in sigaction_invoke()
783 info->ssi_signo == SIGSEGV || info->ssi_signo == SIGBUS) { in sigaction_invoke()
784 si.si_addr = (void *)(uintptr_t)info->ssi_addr; in sigaction_invoke()
785 } else if (info->ssi_signo == SIGCHLD) { in sigaction_invoke()
786 si.si_pid = info->ssi_pid; in sigaction_invoke()
787 si.si_status = info->ssi_status; in sigaction_invoke()
788 si.si_uid = info->ssi_uid; in sigaction_invoke()
790 action->sa_sigaction(info->ssi_signo, &si, NULL); in sigaction_invoke()
810 size_t align_mask = ~(qemu_real_host_page_size() - 1); in qemu_msync()
815 * alignment changes. Additionally - round the size to the multiple in qemu_msync()
818 length += ((uintptr_t)addr & (qemu_real_host_page_size() - 1)); in qemu_msync()
830 DIR *dir; in qemu_close_all_open_fd_proc() local
833 dir = opendir("/proc/self/fd"); in qemu_close_all_open_fd_proc()
834 if (!dir) { in qemu_close_all_open_fd_proc()
839 dfd = dirfd(dir); in qemu_close_all_open_fd_proc()
841 for (de = readdir(dir); de; de = readdir(dir)) { in qemu_close_all_open_fd_proc()
844 if (de->d_name[0] == '.') { in qemu_close_all_open_fd_proc()
847 fd = atoi(de->d_name); in qemu_close_all_open_fd_proc()
862 skip_end--; in qemu_close_all_open_fd_proc()
872 closedir(dir); in qemu_close_all_open_fd_proc()
882 int max_fd = open_max - 1; in qemu_close_all_open_fd_close_range()
897 last = skip[cur_skip] - 1; in qemu_close_all_open_fd_close_range()
971 * From Linux's shm_open(3) man-page: in qemu_shm_alloc()
975 g_string_printf(shm_name, "/qemu-" FMT_pid "-shm-%d", getpid(), in qemu_shm_alloc()
978 fd = shm_open(shm_name->str, oflag, mode); in qemu_shm_alloc()
982 return -1; in qemu_shm_alloc()
990 shm_unlink(shm_name->str); in qemu_shm_alloc()
992 if (ftruncate(fd, size) == -1) { in qemu_shm_alloc()
996 return -1; in qemu_shm_alloc()