IB/core: Do not require CAP_NET_ADMIN for packet sniffing
authorChristoph Lameter <cl@linux.com>
Fri, 13 May 2016 15:52:26 +0000 (10:52 -0500)
committerDoug Ledford <dledford@redhat.com>
Wed, 18 May 2016 14:31:58 +0000 (10:31 -0400)
In the Ethernet/TCP world, CAP_NET_RAW is sufficient to allow a program
to listen to all incoming packets on a specific interface, and the
higher CAP_NET_ADMIN is required to set the interface into promiscuous
mode.  We want to emulate that same basic division of privilege in the
RDMA stack, so when dealing with Raw Ethernet QPs, allow apps with
CAP_NET_RAW to listen to all incoming flows (and direct them as they see
fit in their own listen stream).  Do not require CAP_NET_ADMIN just to
listen to traffic already incoming.  Reserve CAP_NET_ADMIN if we attempt
to set promiscuous mode.

Signed-off-by: Christoph Lameter <cl@linux.com>
Signed-off-by: Doug Ledford <dledford@redhat.com>
drivers/infiniband/core/uverbs_cmd.c

index 03e39c2aaf669262d29bde44e2b040ae925acfa1..1a8babb8ee3c4d328af7e08063cef8f147086a10 100644 (file)
@@ -3089,8 +3089,7 @@ int ib_uverbs_ex_create_flow(struct ib_uverbs_file *file,
        if (cmd.comp_mask)
                return -EINVAL;
 
-       if ((cmd.flow_attr.type == IB_FLOW_ATTR_SNIFFER &&
-            !capable(CAP_NET_ADMIN)) || !capable(CAP_NET_RAW))
+       if (!capable(CAP_NET_RAW))
                return -EPERM;
 
        if (cmd.flow_attr.flags >= IB_FLOW_ATTR_FLAGS_RESERVED)