Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 311508
b: refs/heads/master
c: 116e90b
h: refs/heads/master
v: v3
  • Loading branch information
Jan Beulich authored and Greg Kroah-Hartman committed Jun 26, 2012
1 parent a62eb21 commit b013d80
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 15 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 6fda135c908d0f38a0167adcbd71094572e3059b
refs/heads/master: 116e90b23f74d303e8d607c7a7d54f60f14ab9f2
51 changes: 37 additions & 14 deletions trunk/kernel/printk.c
Original file line number Diff line number Diff line change
Expand Up @@ -862,26 +862,49 @@ static int syslog_print(char __user *buf, int size)
{
char *text;
struct log *msg;
int len;
int len = 0;

text = kmalloc(LOG_LINE_MAX, GFP_KERNEL);
if (!text)
return -ENOMEM;

raw_spin_lock_irq(&logbuf_lock);
if (syslog_seq < log_first_seq) {
/* messages are gone, move to first one */
syslog_seq = log_first_seq;
syslog_idx = log_first_idx;
}
msg = log_from_idx(syslog_idx);
len = msg_print_text(msg, true, text, LOG_LINE_MAX);
syslog_idx = log_next(syslog_idx);
syslog_seq++;
raw_spin_unlock_irq(&logbuf_lock);
while (size > 0) {
size_t n;

raw_spin_lock_irq(&logbuf_lock);
if (syslog_seq < log_first_seq) {
/* messages are gone, move to first one */
syslog_seq = log_first_seq;
syslog_idx = log_first_idx;
}
if (syslog_seq == log_next_seq) {
raw_spin_unlock_irq(&logbuf_lock);
break;
}
msg = log_from_idx(syslog_idx);
n = msg_print_text(msg, true, text, LOG_LINE_MAX);
if (n <= size) {
syslog_idx = log_next(syslog_idx);
syslog_seq++;
} else
n = 0;
raw_spin_unlock_irq(&logbuf_lock);

if (!n)
break;

if (len > 0 && copy_to_user(buf, text, len))
len = -EFAULT;
len += n;
size -= n;
buf += n;
n = copy_to_user(buf - n, text, n);

if (n) {
len -= n;
if (!len)
len = -EFAULT;
break;
}
}

kfree(text);
return len;
Expand Down

0 comments on commit b013d80

Please sign in to comment.