Exemplo n.º 1
0
static int sys_close(int fd) {
    if (FD_CHECK(fd)) {
        close_fs(FD_ENTRY(fd));
        FD_ENTRY(fd) = NULL;
        return 0;
    }
    return -1;
}
Exemplo n.º 2
0
static int sys_ioctl(int fd, int request, void * argp) {
    if (FD_CHECK(fd)) {
        PTR_VALIDATE(argp);
        return ioctl_fs(FD_ENTRY(fd), request, argp);
    }
    return -1;
}
Exemplo n.º 3
0
static int sys_stat(int fd, uintptr_t st) {
    PTR_VALIDATE(st);
    if (FD_CHECK(fd)) {
        return stat_node(FD_ENTRY(fd), st);
    }
    return -1;
}
Exemplo n.º 4
0
static int sys_write(int fd, char * ptr, int len) {
    if (FD_CHECK(fd)) {
        PTR_VALIDATE(ptr);
        fs_node_t * node = FD_ENTRY(fd);
        uint32_t out = write_fs(node, node->offset, len, (uint8_t *)ptr);
        node->offset += out;
        return out;
    }
    return -1;
}
Exemplo n.º 5
0
static int sys_seek(int fd, int offset, int whence) {
    if (FD_CHECK(fd)) {
        if (fd < 3)
            return 0;

        switch (whence) {
        case 0:
            FD_ENTRY(fd)->offset = offset;
            break;
        case 1:
            FD_ENTRY(fd)->offset += offset;
            break;
        case 2:
            FD_ENTRY(fd)->offset = FD_ENTRY(fd)->length + offset;
            break;
        }
        return FD_ENTRY(fd)->offset;
    }
    return -1;
}
Exemplo n.º 6
0
static int sys_readdir(int fd, int index, struct dirent * entry) {
    if (FD_CHECK(fd)) {
        PTR_VALIDATE(entry);
        struct dirent * kentry = readdir_fs(FD_ENTRY(fd), (uint32_t)index);
        if (kentry) {
            memcpy(entry, kentry, sizeof *entry);
            free(kentry);
            return 0;
        } else {
            return 1;
        }
    }
    return -1;
}
Exemplo n.º 7
0
static int sys_write(int fd, char * ptr, int len) {
	if (FD_CHECK(fd)) {
		PTR_VALIDATE(ptr);
		fs_node_t * node = FD_ENTRY(fd);
		if (!has_permission(node, 02)) {
			debug_print(WARNING, "access denied (write, fd=%d)", fd);
			return -EACCES;
		}
		uint32_t out = write_fs(node, node->offset, len, (uint8_t *)ptr);
		node->offset += out;
		return out;
	}
	return -1;
}
Exemplo n.º 8
0
static int sys_write(int fd, char * ptr, int len) {
	if (FD_CHECK(fd)) {
		PTR_VALIDATE(ptr);
		fs_node_t * node = FD_ENTRY(fd);
		if (!(FD_MODE(fd) & 02)) {
			debug_print(WARNING, "access denied (write, fd=%d)", fd);
			return -EACCES;
		}
		uint32_t out = write_fs(node, FD_OFFSET(fd), len, (uint8_t *)ptr);
		FD_OFFSET(fd) += out;
		return out;
	}
	return -EBADF;
}
Exemplo n.º 9
0
static int sys_read(int fd, char * ptr, int len) {
	if (FD_CHECK(fd)) {
		PTR_VALIDATE(ptr);

		fs_node_t * node = FD_ENTRY(fd);
		if (!(FD_MODE(fd) & 01)) {
			debug_print(WARNING, "access denied (read, fd=%d, mode=%d, %s, %s)", fd, FD_MODE(fd), node->name, current_process->name);
			return -EACCES;
		}
		uint32_t out = read_fs(node, FD_OFFSET(fd), len, (uint8_t *)ptr);
		FD_OFFSET(fd) += out;
		return (int)out;
	}
	return -EBADF;
}
Exemplo n.º 10
0
static int sys_seek(int fd, int offset, int whence) {
	if (FD_CHECK(fd)) {
		if (fd < 3) {
			return 0;
		}
		switch (whence) {
			case 0:
				FD_OFFSET(fd) = offset;
				break;
			case 1:
				FD_OFFSET(fd) += offset;
				break;
			case 2:
				FD_OFFSET(fd) = FD_ENTRY(fd)->length + offset;
				break;
		}
		return FD_OFFSET(fd);
	}
	return -EBADF;
}
Exemplo n.º 11
0
#define FD_ENTRY(_name, _fmt)			\
	[CR_FD_##_name] = {			\
		.fmt	= _fmt ".img",		\
		.magic	= _name##_MAGIC,	\
	}

#define FD_ENTRY_F(_name, _fmt, _f)		\
	[CR_FD_##_name] = {			\
		.fmt	= _fmt ".img",		\
		.magic	= _name##_MAGIC,	\
		.oflags	= _f,			\
	}

struct cr_fd_desc_tmpl imgset_template[CR_FD_MAX] = {
	FD_ENTRY(INVENTORY,	"inventory"),
	FD_ENTRY(FDINFO,	"fdinfo-%d"),
	FD_ENTRY(PAGEMAP,	"pagemap-%ld"),
	FD_ENTRY(SHMEM_PAGEMAP,	"pagemap-shmem-%ld"),
	FD_ENTRY(REG_FILES,	"reg-files"),
	FD_ENTRY(EXT_FILES,	"ext-files"),
	FD_ENTRY(NS_FILES,	"ns-files"),
	FD_ENTRY(EVENTFD_FILE,	"eventfd"),
	FD_ENTRY(EVENTPOLL_FILE,"eventpoll"),
	FD_ENTRY(EVENTPOLL_TFD,	"eventpoll-tfd"),
	FD_ENTRY(SIGNALFD,	"signalfd"),
	FD_ENTRY(INOTIFY_FILE,	"inotify"),
	FD_ENTRY(INOTIFY_WD,	"inotify-wd"),
	FD_ENTRY(FANOTIFY_FILE,	"fanotify"),
	FD_ENTRY(FANOTIFY_MARK,	"fanotify-mark"),
	FD_ENTRY(CORE,		"core-%d"),
Exemplo n.º 12
0
Arquivo: image.c Projeto: OSLL/pmover
 * about dumped processes is stored. Each file carries some
 * small portion of info about the whole picture, see below
 * for more details.
 */

#define FD_ENTRY(_name, _fmt, _show)		\
	[CR_FD_##_name] = {			\
		.fmt	= _fmt ".img",		\
		.magic	= _name##_MAGIC,	\
		.show	= _show,		\
	}

static void show_raw_image(int fd, struct cr_options *opt) {};

struct cr_fd_desc_tmpl fdset_template[CR_FD_MAX] = {
	FD_ENTRY(INVENTORY,	"inventory",	 show_inventory),
	FD_ENTRY(FDINFO,	"fdinfo-%d",	 show_files),
	FD_ENTRY(PAGES,		"pages-%d",	 show_pages),
	FD_ENTRY(SHMEM_PAGES,	"pages-shmem-%ld", show_pages),
	FD_ENTRY(REG_FILES,	"reg-files",	 show_reg_files),
	FD_ENTRY(EVENTFD,	"eventfd",	 show_eventfds),
	FD_ENTRY(EVENTPOLL,	"eventpoll",	 show_eventpoll),
	FD_ENTRY(EVENTPOLL_TFD,	"eventpoll-tfd", show_eventpoll_tfd),
	FD_ENTRY(SIGNALFD,	"signalfd",	 show_signalfd),
	FD_ENTRY(INOTIFY,	"inotify",	 show_inotify),
	FD_ENTRY(INOTIFY_WD,	"inotify-wd",	 show_inotify_wd),
	FD_ENTRY(CORE,		"core-%d",	 show_core),
	FD_ENTRY(MM,		"mm-%d",	 show_mm),
	FD_ENTRY(VMAS,		"vmas-%d",	 show_vmas),
	FD_ENTRY(PIPES,		"pipes",	 show_pipes),
	FD_ENTRY(PIPES_DATA,	"pipes-data",	 show_pipes_data),
Exemplo n.º 13
0
/*
 * The cr fd set is the set of files where the information
 * about dumped processes is stored. Each file carries some
 * small portion of info about the whole picture, see below
 * for more details.
 */

#define FD_ENTRY(_name, _fmt)			\
	[CR_FD_##_name] = {			\
		.fmt	= _fmt ".img",		\
		.magic	= _name##_MAGIC,	\
	}

struct cr_fd_desc_tmpl fdset_template[CR_FD_MAX] = {
	FD_ENTRY(INVENTORY,	"inventory"),
	FD_ENTRY(FDINFO,	"fdinfo-%d"),
	FD_ENTRY(PAGEMAP,	"pagemap-%ld"),
	FD_ENTRY(SHMEM_PAGEMAP,	"pagemap-shmem-%ld"),
	FD_ENTRY(REG_FILES,	"reg-files"),
	FD_ENTRY(EXT_FILES,	"ext-files"),
	FD_ENTRY(NS_FILES,	"ns-files"),
	FD_ENTRY(EVENTFD_FILE,	"eventfd"),
	FD_ENTRY(EVENTPOLL_FILE,"eventpoll"),
	FD_ENTRY(EVENTPOLL_TFD,	"eventpoll-tfd"),
	FD_ENTRY(SIGNALFD,	"signalfd"),
	FD_ENTRY(INOTIFY_FILE,	"inotify"),
	FD_ENTRY(INOTIFY_WD,	"inotify-wd"),
	FD_ENTRY(FANOTIFY_FILE,	"fanotify"),
	FD_ENTRY(FANOTIFY_MARK,	"fanotify-mark"),
	FD_ENTRY(CORE,		"core-%d"),