From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753487AbbIRN1q (ORCPT ); Fri, 18 Sep 2015 09:27:46 -0400 Received: from mailout4.w1.samsung.com ([210.118.77.14]:24956 "EHLO mailout4.w1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752618AbbIRN1o (ORCPT ); Fri, 18 Sep 2015 09:27:44 -0400 X-AuditID: cbfec7f5-f794b6d000001495-e1-55fc114e2bf5 From: Paul Osmialowski To: Greg Kroah-Hartman , Daniel Mack , David Herrmann , Djalal Harouni , Paul Moore , linux-kernel@vger.kernel.org Cc: Paul Osmialowski , Lukasz Pawelczyk Subject: [RFC] kdbus: use LSM hooks to restrict ability to send file descriptors Date: Fri, 18 Sep 2015 15:27:03 +0200 Message-id: <1442582823-7368-1-git-send-email-p.osmialowsk@samsung.com> X-Mailer: git-send-email 1.9.1 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFmpnluLIzCtJLcpLzFFi42I5/e/4ZV0/wT+hBv/uqFo0/X3FYrH4sphF 8+L1bBZnJi1ksri8aw6bxYQ3B5gtPl/7xW6x8vd2NgcOj6cTJrN77J+7ht1jxa8j7B7v911l 8+jbsorR4/MmOY/tu5ezBLBHcdmkpOZklqUW6dslcGV0nI4qOMlbsb2hsoHxEFcXIyeHhICJ xP+D85khbDGJC/fWs3UxcnEICSxllPh5/QsrhNPIJDF9xhmwKjYBQ4mb/w8zgiREBF4ySnxs /sXexcjBwSwQK3H+aihIjbBAgMT/mcsZQcIsAqoSdzeDhXkF3CVmTtjDBrFMTuLkscmsExi5 FzAyrGIUTS1NLihOSs810itOzC0uzUvXS87P3cQICZ6vOxiXHrM6xCjAwajEw+vh8TtUiDWx rLgy9xCjBAezkgjv2htAId6UxMqq1KL8+KLSnNTiQ4zSHCxK4rwzd70PERJITyxJzU5NLUgt gskycXBKNTAul7/z4OLzfTEflMz6z5mlLjuUcqI0XfzO1efxc30kbLW79gRdWfHojdXTpOt6 E2I2dnuxGjP3WnPMnLr9xq6DptnXttq5P93wRdlu9/X02ft91i3/dlpvesqnaauziy5v5+lv NFrXZJB5/Fi0S4cm07+DC0S9jy9gnMe/lj+jy27J1dMb5jzxVmIpzkg01GIuKk4EAEDpfCYa AgAA Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The goal of this patch is to reproduce on kdbus the same behavior that is expressed by Unix Domain Sockets when it comes to restricting ability to pass opened file descriptors. Signed-off-by: Paul Osmialowski --- ipc/kdbus/message.c | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/ipc/kdbus/message.c b/ipc/kdbus/message.c index ae565cd..b083431 100644 --- a/ipc/kdbus/message.c +++ b/ipc/kdbus/message.c @@ -24,6 +24,7 @@ #include #include #include +#include #include #include "bus.h" @@ -150,13 +151,19 @@ int kdbus_gaps_install(struct kdbus_gaps *gaps, struct kdbus_pool_slice *slice, for (i = 0; i < gaps->n_fds; ++i) { int fd; - fd = get_unused_fd_flags(O_CLOEXEC); - if (fd < 0) + if (gaps->fd_files[i] && + security_file_receive(gaps->fd_files[i])) { incomplete_fds = true; + fds[n_fds++] = -1; + } else { + fd = get_unused_fd_flags(O_CLOEXEC); + if (fd < 0) + incomplete_fds = true; - WARN_ON(!gaps->fd_files[i]); + WARN_ON(!gaps->fd_files[i]); - fds[n_fds++] = fd < 0 ? -1 : fd; + fds[n_fds++] = fd < 0 ? -1 : fd; + } } /* @@ -178,6 +185,13 @@ int kdbus_gaps_install(struct kdbus_gaps *gaps, struct kdbus_pool_slice *slice, for (i = 0; i < gaps->n_memfds; ++i) { int memfd; + if (gaps->memfd_files[i] && + security_file_receive(gaps->memfd_files[i])) { + incomplete_fds = true; + fds[n_fds++] = -1; + continue; + } + memfd = get_unused_fd_flags(O_CLOEXEC); if (memfd < 0) { incomplete_fds = true; -- 1.9.1