Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756770AbYCNQXV (ORCPT ); Fri, 14 Mar 2008 12:23:21 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1754101AbYCNQXH (ORCPT ); Fri, 14 Mar 2008 12:23:07 -0400 Received: from sacred.ru ([62.205.161.221]:59805 "EHLO sacred.ru" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751181AbYCNQXE (ORCPT ); Fri, 14 Mar 2008 12:23:04 -0400 Message-ID: <47DAA660.90401@openvz.org> Date: Fri, 14 Mar 2008 19:22:56 +0300 From: Pavel Emelyanov User-Agent: Thunderbird 2.0.0.12 (X11/20080213) MIME-Version: 1.0 To: David Woodhouse , Linux Kernel Mailing List , Linux Netdev List Subject: Audit vs netlink interaction problem Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Greylist: Sender succeeded SMTP AUTH authentication, not delayed by milter-greylist-3.0 (sacred.ru [62.205.161.221]); Fri, 14 Mar 2008 19:22:57 +0300 (MSK) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1745 Lines: 43 Hi, David! I've found an interesting feature of how audit uses netlink for communications. Look. The kauditd_thread() calls netlink_unicast() and passes the audit_pid to it. The audit_pid, in turn, is received from the user space and the tool (I've checked the audit v1.6.9) uses getpid() to pass one in the kernel. Besides, this tool doesn't bind the netlink socket to this id, but simply creates it allowing the kernel to auto-bind one. That's the preamble. The problem is that netlink_autobind() _does_not_ guarantees that the socket will be auto-binded to the current pid. Instead it uses the current pid as a hint to start looking for a free id. So, in case of conflict, the audit messages can be sent to a wrong socket. This can happen (it's unlikely, but can be) in case some task opens more than one netlink sockets and then the audit one starts - in this case the audit's pid can be busy and its socket will be bound to another id. The reason I raised this problem is that I'm now working on pid and network namespaces and found, that this problem doesn't allow to resolve the following issue gracefully. The task_struct->tgid field, which is currently used in netlink for auto-binding, is going to be deprecated. Thus I have to make netlink auto-binding play another rules when selecting a pid, but this will break the audit work for sure, since it implicitly relies, that the netlink socket will be bound to the current task pid. What do you think about it? Thanks, Pavel -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/