linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 1/3] Creds: creds->security can be NULL is selinux is disabled
@ 2009-09-13  2:54 Eric Paris
  2009-09-13  2:54 ` [PATCH 2/3] SELinux: seperate avc_cache flushing Eric Paris
                   ` (4 more replies)
  0 siblings, 5 replies; 8+ messages in thread
From: Eric Paris @ 2009-09-13  2:54 UTC (permalink / raw)
  To: linux-kernel, selinux; +Cc: sds, jmorris, mingo, dhowells

__validate_process_creds should check if selinux is actually enabled before
running tests on the selinux portion of the credentials struct.

Signed-off-by: Eric Paris <eparis@redhat.com>
---

 include/linux/cred.h       |   13 ++++++++-----
 include/linux/selinux.h    |    9 +++++++++
 security/selinux/exports.c |    6 ++++++
 3 files changed, 23 insertions(+), 5 deletions(-)

diff --git a/include/linux/cred.h b/include/linux/cred.h
index 24520a5..fb37160 100644
--- a/include/linux/cred.h
+++ b/include/linux/cred.h
@@ -15,6 +15,7 @@
 #include <linux/capability.h>
 #include <linux/init.h>
 #include <linux/key.h>
+#include <linux/selinux.h>
 #include <asm/atomic.h>
 
 struct user_struct;
@@ -182,11 +183,13 @@ static inline bool creds_are_invalid(const struct cred *cred)
 	if (atomic_read(&cred->usage) < atomic_read(&cred->subscribers))
 		return true;
 #ifdef CONFIG_SECURITY_SELINUX
-	if ((unsigned long) cred->security < PAGE_SIZE)
-		return true;
-	if ((*(u32*)cred->security & 0xffffff00) ==
-	    (POISON_FREE << 24 | POISON_FREE << 16 | POISON_FREE << 8))
-		return true;
+	if (selinux_is_enabled()) {
+		if ((unsigned long) cred->security < PAGE_SIZE)
+			return true;
+		if ((*(u32 *)cred->security & 0xffffff00) ==
+		    (POISON_FREE << 24 | POISON_FREE << 16 | POISON_FREE << 8))
+			return true;
+	}
 #endif
 	return false;
 }
diff --git a/include/linux/selinux.h b/include/linux/selinux.h
index 20f965d..223d06a 100644
--- a/include/linux/selinux.h
+++ b/include/linux/selinux.h
@@ -61,6 +61,11 @@ void selinux_secmark_refcount_inc(void);
  *     existing SECMARK targets has been removed/flushed.
  */
 void selinux_secmark_refcount_dec(void);
+
+/**
+ * selinux_is_enabled - is SELinux enabled?
+ */
+bool selinux_is_enabled(void);
 #else
 
 static inline int selinux_string_to_sid(const char *str, u32 *sid)
@@ -84,6 +89,10 @@ static inline void selinux_secmark_refcount_dec(void)
 	return;
 }
 
+static bool selinux_is_enabled(void)
+{
+	return false;
+}
 #endif	/* CONFIG_SECURITY_SELINUX */
 
 #endif /* _LINUX_SELINUX_H */
diff --git a/security/selinux/exports.c b/security/selinux/exports.c
index c73aeaa..c0a454a 100644
--- a/security/selinux/exports.c
+++ b/security/selinux/exports.c
@@ -63,3 +63,9 @@ void selinux_secmark_refcount_dec(void)
 	atomic_dec(&selinux_secmark_refcount);
 }
 EXPORT_SYMBOL_GPL(selinux_secmark_refcount_dec);
+
+bool selinux_is_enabled(void)
+{
+	return selinux_enabled;
+}
+EXPORT_SYMBOL_GPL(selinux_is_enabled);


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 2/3] SELinux: seperate avc_cache flushing
  2009-09-13  2:54 [PATCH 1/3] Creds: creds->security can be NULL is selinux is disabled Eric Paris
@ 2009-09-13  2:54 ` Eric Paris
  2009-09-13  2:54 ` [PATCH 3/3] SELinux: flush the avc before disabling SELinux Eric Paris
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 8+ messages in thread
From: Eric Paris @ 2009-09-13  2:54 UTC (permalink / raw)
  To: linux-kernel, selinux; +Cc: sds, jmorris, mingo, dhowells

Move the avc_cache flushing into it's own function so it can be reused when
disabling SELinux.

Signed-off-by: Eric Paris <eparis@redhat.com>
---

 security/selinux/avc.c |   24 +++++++++++++++++-------
 1 files changed, 17 insertions(+), 7 deletions(-)

diff --git a/security/selinux/avc.c b/security/selinux/avc.c
index e3d1901..f601246 100644
--- a/security/selinux/avc.c
+++ b/security/selinux/avc.c
@@ -709,18 +709,16 @@ out:
 }
 
 /**
- * avc_ss_reset - Flush the cache and revalidate migrated permissions.
- * @seqno: policy sequence number
+ * avc_flush - Flush the cache
  */
-int avc_ss_reset(u32 seqno)
+static void avc_flush(void)
 {
-	struct avc_callback_node *c;
-	int i, rc = 0, tmprc;
-	unsigned long flag;
-	struct avc_node *node;
 	struct hlist_head *head;
 	struct hlist_node *next;
+	struct avc_node *node;
 	spinlock_t *lock;
+	unsigned long flag;
+	int i;
 
 	for (i = 0; i < AVC_CACHE_SLOTS; i++) {
 		head = &avc_cache.slots[i];
@@ -737,6 +735,18 @@ int avc_ss_reset(u32 seqno)
 		rcu_read_unlock();
 		spin_unlock_irqrestore(lock, flag);
 	}
+}
+
+/**
+ * avc_ss_reset - Flush the cache and revalidate migrated permissions.
+ * @seqno: policy sequence number
+ */
+int avc_ss_reset(u32 seqno)
+{
+	struct avc_callback_node *c;
+	int rc = 0, tmprc;
+
+	avc_flush();
 
 	for (c = avc_callbacks; c; c = c->next) {
 		if (c->events & AVC_CALLBACK_RESET) {


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 3/3] SELinux: flush the avc before disabling SELinux
  2009-09-13  2:54 [PATCH 1/3] Creds: creds->security can be NULL is selinux is disabled Eric Paris
  2009-09-13  2:54 ` [PATCH 2/3] SELinux: seperate avc_cache flushing Eric Paris
@ 2009-09-13  2:54 ` Eric Paris
  2009-09-13 22:23 ` [PATCH 1/3] Creds: creds->security can be NULL is selinux is disabled James Morris
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 8+ messages in thread
From: Eric Paris @ 2009-09-13  2:54 UTC (permalink / raw)
  To: linux-kernel, selinux; +Cc: sds, jmorris, mingo, dhowells

Before SELinux is disabled at boot it can create AVC entries.  This patch
will flush those entries before disabling SELinux.

Signed-off-by: Eric Paris <eparis@redhat.com>
---

 security/selinux/avc.c |    2 ++
 1 files changed, 2 insertions(+), 0 deletions(-)

diff --git a/security/selinux/avc.c b/security/selinux/avc.c
index f601246..1ed0f07 100644
--- a/security/selinux/avc.c
+++ b/security/selinux/avc.c
@@ -868,6 +868,8 @@ u32 avc_policy_seqno(void)
 
 void avc_disable(void)
 {
+	avc_flush();
+	synchronize_rcu();
 	if (avc_node_cachep)
 		kmem_cache_destroy(avc_node_cachep);
 }


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH 1/3] Creds: creds->security can be NULL is selinux is disabled
  2009-09-13  2:54 [PATCH 1/3] Creds: creds->security can be NULL is selinux is disabled Eric Paris
  2009-09-13  2:54 ` [PATCH 2/3] SELinux: seperate avc_cache flushing Eric Paris
  2009-09-13  2:54 ` [PATCH 3/3] SELinux: flush the avc before disabling SELinux Eric Paris
@ 2009-09-13 22:23 ` James Morris
  2009-09-13 22:55   ` Eric Paris
  2009-09-14  2:58 ` [GIT] fix creds / SELinux regressions James Morris
  2009-09-14 11:53 ` [PATCH 1/3] Creds: creds->security can be NULL is selinux is disabled David Howells
  4 siblings, 1 reply; 8+ messages in thread
From: James Morris @ 2009-09-13 22:23 UTC (permalink / raw)
  To: Eric Paris; +Cc: linux-kernel, selinux, sds, mingo, dhowells

On Sat, 12 Sep 2009, Eric Paris wrote:

> __validate_process_creds should check if selinux is actually enabled before
> running tests on the selinux portion of the credentials struct.

Have you verified that this fixes the problem?


-- 
James Morris
<jmorris@namei.org>

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 1/3] Creds: creds->security can be NULL is selinux is disabled
  2009-09-13 22:23 ` [PATCH 1/3] Creds: creds->security can be NULL is selinux is disabled James Morris
@ 2009-09-13 22:55   ` Eric Paris
  0 siblings, 0 replies; 8+ messages in thread
From: Eric Paris @ 2009-09-13 22:55 UTC (permalink / raw)
  To: James Morris; +Cc: linux-kernel, selinux, sds, mingo, dhowells

On Mon, 2009-09-14 at 08:23 +1000, James Morris wrote:
> On Sat, 12 Sep 2009, Eric Paris wrote:
> 
> > __validate_process_creds should check if selinux is actually enabled before
> > running tests on the selinux portion of the credentials struct.
> 
> Have you verified that this fixes the problem?

Yes, I was able to reproduce the problem using selinux=0 at the command
line.  This patch fixes the problem.

-Eric


^ permalink raw reply	[flat|nested] 8+ messages in thread

* [GIT] fix creds / SELinux regressions
  2009-09-13  2:54 [PATCH 1/3] Creds: creds->security can be NULL is selinux is disabled Eric Paris
                   ` (2 preceding siblings ...)
  2009-09-13 22:23 ` [PATCH 1/3] Creds: creds->security can be NULL is selinux is disabled James Morris
@ 2009-09-14  2:58 ` James Morris
  2009-09-14  4:20   ` Ingo Molnar
  2009-09-14 11:53 ` [PATCH 1/3] Creds: creds->security can be NULL is selinux is disabled David Howells
  4 siblings, 1 reply; 8+ messages in thread
From: James Morris @ 2009-09-14  2:58 UTC (permalink / raw)
  To: Eric Paris, Linus Torvalds
  Cc: linux-kernel, selinux, Stephen Smalley, Ingo Molnar,
	David Howells

Hi Linus, please pull.


The following changes since commit 86d710146fb9975f04c505ec78caa43d227c1018:
  Linus Torvalds (1):
        Merge git://git.linux-nfs.org/projects/trondmy/nfs-2.6

are available in the git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/security-testing-2.6 for-linus

Eric Paris (3):
      Creds: creds->security can be NULL is selinux is disabled
      SELinux: seperate avc_cache flushing
      SELinux: flush the avc before disabling SELinux

 include/linux/cred.h       |   13 ++++++++-----
 include/linux/selinux.h    |    9 +++++++++
 security/selinux/avc.c     |   26 +++++++++++++++++++-------
 security/selinux/exports.c |    6 ++++++
 4 files changed, 42 insertions(+), 12 deletions(-)

-- 
James Morris
<jmorris@namei.org>

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [GIT] fix creds / SELinux regressions
  2009-09-14  2:58 ` [GIT] fix creds / SELinux regressions James Morris
@ 2009-09-14  4:20   ` Ingo Molnar
  0 siblings, 0 replies; 8+ messages in thread
From: Ingo Molnar @ 2009-09-14  4:20 UTC (permalink / raw)
  To: James Morris
  Cc: Eric Paris, Linus Torvalds, linux-kernel, selinux,
	Stephen Smalley, David Howells


* James Morris <jmorris@namei.org> wrote:

> Hi Linus, please pull.
> 
> 
> The following changes since commit 86d710146fb9975f04c505ec78caa43d227c1018:
>   Linus Torvalds (1):
>         Merge git://git.linux-nfs.org/projects/trondmy/nfs-2.6
> 
> are available in the git repository at:
> 
>   git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/security-testing-2.6 for-linus
> 
> Eric Paris (3):
>       Creds: creds->security can be NULL is selinux is disabled
>       SELinux: seperate avc_cache flushing
>       SELinux: flush the avc before disabling SELinux
> 
>  include/linux/cred.h       |   13 ++++++++-----
>  include/linux/selinux.h    |    9 +++++++++
>  security/selinux/avc.c     |   26 +++++++++++++++++++-------
>  security/selinux/exports.c |    6 ++++++
>  4 files changed, 42 insertions(+), 12 deletions(-)

Guys, _please_ do better changelogs and describe how bugs were 
found. It doesnt matter for me personally but these commit logs 
utterly lack any description about how the bugs were 
found/triggered, how relevant they are in practice, there's no 
crashlog signatures in them for people to check, no Reported-by 
lines, etc.

	Ingo


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 1/3] Creds: creds->security can be NULL is selinux is disabled
  2009-09-13  2:54 [PATCH 1/3] Creds: creds->security can be NULL is selinux is disabled Eric Paris
                   ` (3 preceding siblings ...)
  2009-09-14  2:58 ` [GIT] fix creds / SELinux regressions James Morris
@ 2009-09-14 11:53 ` David Howells
  4 siblings, 0 replies; 8+ messages in thread
From: David Howells @ 2009-09-14 11:53 UTC (permalink / raw)
  To: Eric Paris; +Cc: dhowells, linux-kernel, selinux, sds, jmorris, mingo

Eric Paris <eparis@redhat.com> wrote:

> __validate_process_creds should check if selinux is actually enabled before
> running tests on the selinux portion of the credentials struct.
> 
> Signed-off-by: Eric Paris <eparis@redhat.com>

Acked-by: David Howells <dhowells@redhat.com>

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2009-09-14 11:53 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-09-13  2:54 [PATCH 1/3] Creds: creds->security can be NULL is selinux is disabled Eric Paris
2009-09-13  2:54 ` [PATCH 2/3] SELinux: seperate avc_cache flushing Eric Paris
2009-09-13  2:54 ` [PATCH 3/3] SELinux: flush the avc before disabling SELinux Eric Paris
2009-09-13 22:23 ` [PATCH 1/3] Creds: creds->security can be NULL is selinux is disabled James Morris
2009-09-13 22:55   ` Eric Paris
2009-09-14  2:58 ` [GIT] fix creds / SELinux regressions James Morris
2009-09-14  4:20   ` Ingo Molnar
2009-09-14 11:53 ` [PATCH 1/3] Creds: creds->security can be NULL is selinux is disabled David Howells

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).