logging to dmesg from userland

Ian Smith smithi at nimnet.asn.au
Mon Mar 14 15:03:36 UTC 2011

In freebsd-questions Digest, Vol 354, Issue 1, Message: 15
On Sun, 13 Mar 2011 19:08:20 -0700 perryh at pluto.rain.com wrote:

 > I am looking for a way to write into the kernel message buffer --
 > the one that dmesg prints out -- from a userland program, to help
 > in relating kernel printf messages to the userland operations which
 > provoked them.  (Yes, I am aware of the potential DoS implications:
 > the capability should be restricted to root, or at least to the
 > "operator" group.  I expect to use it only in single-user mode.)

Perry, interesting to see that unprivileged users can use logger to spam 
/var/log/messages (by default), on 5.5 <cough> and 7.4-PRE anyway.  I've 
long assumed that I could do that just because I'm in wheel, but not so.

 > Is there a program, or a system call, which can do this?  logger(1)
 > seemed a likely prospect, but either it doesn't have this capability
 > or I haven't found the formula.

Had a bit of a play around earlier, and as an unprivileged user can do:

%who am i
subs             ttyv6    Mar 14 18:06
%id -p
uid     subs
groups  subs
%logger -p kern.notice hello from subs at kern.notice
%logger -p kern.crit hello from subs at kern.crit

logger(1) without -p writes to user.notice, which writes only to 
/var/log/messages (with standardish syslog.conf settings), but of the 
two above, only the latter one to kern.crit wound up in 'dmesg -a'

sola# dmesg | grep subs
sola# dmesg -a | grep subs
Mar 15 00:07:35 sola subs: hello from subs at kern.crit
Mar 15 00:07:35 sola subs: hello from subs at kern.crit

but twice!

Both appear in /var/log/messages, one of each, but only the latter also 
appeared - again twice - in /var/log/console.log .. not sure why twice, 
but syslog.conf can be tricky .. anyway, later trying other kern.levels:

%logger -p kern.err hello from subs at kern.err
%logger -p kern.alert hello from subs at kern.alert
%logger -p kern.warning hello from subs at kern.warning

All three go to messages, but just these two added to dmesg -a output:

Mar 15 00:44:54 sola subs: hello from subs at kern.err
Mar 15 00:45:37 sola subs: hello from subs at kern.alert

Moreover on my 7.4 system I tested also with kern.emerg, which indeed 
sent the emerg message to all open consoles, including root's!

Other kern. levels may work too, as may other facilities? and YMMV.

Colour me very surprised not having to be root to do any of those, 
especially those that do write to the kernel message buffer ..

cheers, Ian

More information about the freebsd-questions mailing list