All of lore.kernel.org
 help / color / mirror / Atom feed
From: Pablo Neira <pablo@eurodev.net>
To: Chris Wright <chrisw@osdl.org>
Cc: netdev@oss.sgi.com, davem@davemloft.net, jmorris@redhat.com,
	sds@epoch.ncsc.mil, serue@us.ibm.com
Subject: Re: [RFC][PATCH 2/3] netlink check sender, audit
Date: Tue, 15 Feb 2005 03:36:50 +0100	[thread overview]
Message-ID: <42116042.6030205@eurodev.net> (raw)
In-Reply-To: <42115E7E.6050909@eurodev.net>

[-- Attachment #1: Type: text/plain, Size: 1340 bytes --]

Pablo Neira wrote:

> Chris Wright wrote:
>
>>> With your patch, a message from user space process that doesn't have 
>>> the capabilites follows this path:
>>>
>>> sys_sendmsg() -> netlink_sendmsg() -> netlink_unicast() -> 
>>> netlink_sendskb() = discarded here.
>>>
>>> Currently, it continues, for example in case of rtnetlink:
>>>
>>> ... -> netlink_sendskb() -> sk_data_ready(sk, len) -> 
>>> rtnetlink_rcv() -> rtnetlink_rcv_skb() -> rtnetlink_rcv_msg() = 
>>> discarded here.
>>>
>>> Nowadays the message is enqueued but it's discarded later. So if I'm 
>>> not missing anything, I don't see the point of adding a new function 
>>> to check for capabilities/audit stuff just a bit before.
>>>   
>>
>>
>> The purpose is to guarantee that the checks are done in the sender's
>> context to avoid having to cache values such as capabilities, SELinux
>> SID, audit loginuid.
>>  
>>
>
> Thanks for the explanation. I don't still like so much the new 
> netlink_kernel_create_check function. I think that we could get more 
> variations of netlink_kernel_create in future just to add another 
> feature/checking. So I prefer new function (netlink_kernel_set_check) 
> that set check_sender if it's needed once the netlink socket is 
> created. I've modified your patches to use this function.


Sorry, I'm stupid. Wrong patch.

--
Pablo

[-- Attachment #2: netlink.patch --]
[-- Type: text/x-patch, Size: 2044 bytes --]

===== net/netlink/af_netlink.c 1.69 vs edited =====
--- 1.69/net/netlink/af_netlink.c	2005-01-21 21:25:32 +01:00
+++ edited/net/netlink/af_netlink.c	2005-02-15 03:34:53 +01:00
@@ -71,6 +71,7 @@
 	struct netlink_callback	*cb;
 	spinlock_t		cb_lock;
 	void			(*data_ready)(struct sock *sk, int bytes);
+	int			(*check_sender)(struct sk_buff *skb);
 };
 
 #define nlk_sk(__sk) ((struct netlink_opt *)(__sk)->sk_protinfo)
@@ -636,9 +637,15 @@
 int netlink_sendskb(struct sock *sk, struct sk_buff *skb, int protocol)
 {
 	struct netlink_opt *nlk;
-	int len = skb->len;
+	int err, len = skb->len;
+ 	nlk = nlk_sk(sk);
+
+	if (nlk->check_sender)
+		if ((err = nlk->check_sender(skb))) {
+			netlink_detachskb(sk, skb);
+			return err;
+		}
 
-	nlk = nlk_sk(sk);
 #ifdef NL_EMULATE_DEV
 	if (nlk->handler) {
 		skb_orphan(skb);
@@ -1063,6 +1070,12 @@
 	return sk;
 }
 
+inline void netlink_kernel_set_check(struct sock *sk, 
+				     int (*check)(struct sk_buff *skb))
+{
+	nlk_sk(sk)->check_sender = check;
+}
+
 void netlink_set_nonroot(int protocol, unsigned int flags)
 { 
 	if ((unsigned int)protocol < MAX_LINKS) 
@@ -1460,6 +1473,7 @@
 EXPORT_SYMBOL(netlink_broadcast);
 EXPORT_SYMBOL(netlink_dump_start);
 EXPORT_SYMBOL(netlink_kernel_create);
+EXPORT_SYMBOL(netlink_kernel_set_check);
 EXPORT_SYMBOL(netlink_register_notifier);
 EXPORT_SYMBOL(netlink_set_err);
 EXPORT_SYMBOL(netlink_set_nonroot);
===== include/linux/netlink.h 1.23 vs edited =====
--- 1.23/include/linux/netlink.h	2005-02-07 06:59:39 +01:00
+++ edited/include/linux/netlink.h	2005-02-15 02:53:35 +01:00
@@ -117,6 +117,7 @@
 
 
 extern struct sock *netlink_kernel_create(int unit, void (*input)(struct sock *sk, int len));
+extern inline void netlink_kernel_set_check(struct sock *sk, int (*check)(struct sk_buff *skb));
 extern void netlink_ack(struct sk_buff *in_skb, struct nlmsghdr *nlh, int err);
 extern int netlink_unicast(struct sock *ssk, struct sk_buff *skb, __u32 pid, int nonblock);
 extern int netlink_broadcast(struct sock *ssk, struct sk_buff *skb, __u32 pid,

  reply	other threads:[~2005-02-15  2:36 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-02-12  9:01 [RFC][PATCH 0/3] netlink check sender Chris Wright
2005-02-12  9:02 ` [RFC][PATCH 1/3] " Chris Wright
2005-02-12  9:05   ` [RFC][PATCH 2/3] netlink check sender, audit Chris Wright
2005-02-12  9:06     ` [RFC][PATCH 3/3] netlink check sender, rtnetlink Chris Wright
2005-02-12 16:48     ` [RFC][PATCH 2/3] netlink check sender, audit Pablo Neira
2005-02-12 21:41       ` Pablo Neira
2005-02-14 13:08         ` Stephen Smalley
2005-02-15  0:13         ` Chris Wright
2005-02-15  2:29           ` Pablo Neira
2005-02-15  2:36             ` Pablo Neira [this message]
2005-02-15  3:47             ` Chris Wright
2005-02-15 22:19               ` Pablo Neira
2005-02-15 22:22                 ` Chris Wright
2005-02-15 22:27                   ` Pablo Neira
2005-02-16  0:11                     ` Chris Wright
2005-02-16  3:42                       ` James Morris
2005-02-15  0:11       ` Chris Wright
2005-02-14 12:59   ` [RFC][PATCH 1/3] netlink check sender Stephen Smalley
2005-02-14 13:05     ` Stephen Smalley
2005-02-15  0:22       ` Chris Wright
2005-02-15  0:17     ` Chris Wright

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=42116042.6030205@eurodev.net \
    --to=pablo@eurodev.net \
    --cc=chrisw@osdl.org \
    --cc=davem@davemloft.net \
    --cc=jmorris@redhat.com \
    --cc=netdev@oss.sgi.com \
    --cc=sds@epoch.ncsc.mil \
    --cc=serue@us.ibm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.