modules/pam_tty_audit/pam_tty_audit.c: Deal with mismatched message size. (nl_recv): Pad result with zeros if message is short from older kernel.
Signed-off-by: Richard Guy Briggs rgb@redhat.com --- modules/pam_tty_audit/pam_tty_audit.c | 9 +++++++-- 1 files changed, 7 insertions(+), 2 deletions(-)
diff --git a/modules/pam_tty_audit/pam_tty_audit.c b/modules/pam_tty_audit/pam_tty_audit.c index cc86255..a1a3aa4 100644 --- a/modules/pam_tty_audit/pam_tty_audit.c +++ b/modules/pam_tty_audit/pam_tty_audit.c @@ -109,7 +109,7 @@ nl_recv (int fd, unsigned type, void *buf, size_t size) struct msghdr msg; struct nlmsghdr nlm; struct iovec iov[2]; - ssize_t res; + ssize_t res, resdiff;
again: iov[0].iov_base = &nlm; @@ -161,12 +161,17 @@ nl_recv (int fd, unsigned type, void *buf, size_t size) res = recvmsg (fd, &msg, 0); if (res == -1) return -1; - if ((size_t)res != NLMSG_LENGTH (size) + resdiff = NLMSG_LENGTH(size) - (size_t)res; + if (resdiff < 0 || nlm.nlmsg_type != type) { errno = EIO; return -1; } + else if (resdiff > 0) + { + memset(buf[size - resdiff], 0, resdiff); + } return 0; }