예제 #1
0
asmlinkage long compat_sys_syslog(u32 type, char __user * buf, u32 len)
{
	/* sign extend len */
	return sys_syslog(type, buf, (int)len);
}
예제 #2
0
static int kmsg_read(struct inode * inode, struct file * file,char * buf, int count)
{
	return sys_syslog(2,buf,count);
}
예제 #3
0
static void kmsg_release(struct inode * inode, struct file * file)
{
	(void) sys_syslog(0,NULL,0);
}
예제 #4
0
static int kmsg_open(struct inode * inode, struct file * file)
{
	return sys_syslog(1,NULL,0);
}
예제 #5
0
/*
 *  stress_klog
 *	stress kernel logging interface
 */
int stress_klog(
	uint64_t *const counter,
	const uint32_t instance,
	const uint64_t max_ops,
	const char *name)
{
	char *buffer;
	ssize_t len;

	(void)instance;

	len  = sys_syslog(SYSLOG_ACTION_SIZE_BUFFER, NULL, 0);
	if (len < 0) {
		if (!instance)
			pr_err(stderr, "%s: cannot determine syslog buffer "
				"size: errno=%d (%s)\n",
				name, errno, strerror(errno));
		return EXIT_NO_RESOURCE;
	}
	if (len == 0) {
		if (!instance)
			pr_err(stderr, "%s: zero sized syslog buffer, aborting.\n", name);
		return EXIT_NO_RESOURCE;
	}
	if (len > (ssize_t)(4 * MB)) {
		if (!instance)
			pr_inf(stderr, "%s: truncating syslog buffer to 4MB\n", name);
		len  = 4 * MB;
	}
	buffer = malloc((size_t)len);
	if (!buffer) {
		pr_err(stderr, "%s: cannot allocate syslog buffer\n", name);
		return EXIT_NO_RESOURCE;
	}

	do {
		int ret, buflen = (mwc32() % len) + 1;

		ret = sys_syslog(SYSLOG_ACTION_READ_ALL, buffer, buflen);
		if (ret < 0)
			pr_fail(stderr, "%s: syslog ACTION_READ_ALL failed: "
				"errno=%d (%s)\n",
				name, errno, strerror(errno));
		if (ret > buflen)
			pr_fail(stderr, "%s: syslog ACTION_READ_ALL returned more "
				"data than was requested.\n", name);

		/* open, no-op, ignore failure */
		(void)sys_syslog(SYSLOG_ACTION_OPEN, NULL, 0);

		/* close, no-op, ignore failure */
		(void)sys_syslog(SYSLOG_ACTION_CLOSE, NULL, 0);

		/* get unread size, ignore failure */
		(void)sys_syslog(SYSLOG_ACTION_SIZE_UNREAD, NULL, 0);

		/* get size of kernel buffer, ignore return */
		(void)sys_syslog(SYSLOG_ACTION_SIZE_BUFFER, NULL, 0);

		(*counter)++;
	} while (opt_do_run && (!max_ops || *counter < max_ops));

	free(buffer);
	return EXIT_SUCCESS;
}
예제 #6
0
asmlinkage long compat_sys_syslog(u32 type, char __user * buf, u32 len)
{
	
	return sys_syslog(type, buf, (int)len);
}