asmlinkage long compat_sys_syslog(u32 type, char __user * buf, u32 len) { /* sign extend len */ return sys_syslog(type, buf, (int)len); }
static int kmsg_read(struct inode * inode, struct file * file,char * buf, int count) { return sys_syslog(2,buf,count); }
static void kmsg_release(struct inode * inode, struct file * file) { (void) sys_syslog(0,NULL,0); }
static int kmsg_open(struct inode * inode, struct file * file) { return sys_syslog(1,NULL,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; }
asmlinkage long compat_sys_syslog(u32 type, char __user * buf, u32 len) { return sys_syslog(type, buf, (int)len); }