]> git.baikalelectronics.ru Git - kernel.git/commit
audit: set nlmsg_len for multicast messages.
authorRichard Guy Briggs <rgb@redhat.com>
Thu, 21 Aug 2014 17:40:41 +0000 (13:40 -0400)
committerEric Paris <eparis@redhat.com>
Tue, 23 Sep 2014 20:37:54 +0000 (16:37 -0400)
commit081e2ecf183fc02487122e341b90193e09cf46e2
tree05a954d24f606dba272ca0a2e9da43e4117feaba
parentbf1af46b6a3be039de423ca84b069c0fce73d2e8
audit: set nlmsg_len for multicast messages.

Report:
Looking at your example code in
http://people.redhat.com/rbriggs/audit-multicast-listen/audit-multicast-listen.c,
it seems that nlmsg_len field in the received messages is supposed to
contain the length of the header + payload, but it is always set to the
size of the header only, i.e. 16. The example program works, because
the printf format specifies the minimum width, not "precision", so it
simply prints out the payload until the first zero byte. This isn't too
much of a problem, but precludes the use of recvmmsg, iiuc?

(gdb) p *(struct nlmsghdr*)nlh
$14 = {nlmsg_len = 16, nlmsg_type = 1100, nlmsg_flags = 0, nlmsg_seq = 0, nlmsg_pid = 9910}

The only time nlmsg_len would have been updated was at audit_buffer_alloc()
inside audit_log_start() and never updated after.  It should arguably be done
in audit_log_vformat(), but would be more efficient in audit_log_end().

Reported-by: Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Signed-off-by: Richard Guy Briggs <rgb@redhat.com>
kernel/audit.c