* corrected sidtab locking patch
[not found] ` <430F4824.4090802@tresys.com>
@ 2005-08-26 17:14 ` Jason Tang
2005-08-26 17:38 ` Stephen Smalley
0 siblings, 1 reply; 3+ messages in thread
From: Jason Tang @ 2005-08-26 17:14 UTC (permalink / raw)
To: selinux
[-- Attachment #1: Type: text/plain, Size: 327 bytes --]
The following patch allows a program to enable locking in
libsepol/sidtab.c. By default sidtab.c does not lock the sidtab when
adding and removing entries; this causes problems for multi-threaded
programs using it. Programs may set up function pointers to perform
locking as they see fit.
--
Jason Tang / jtang@tresys.com
[-- Attachment #2: patch-locking --]
[-- Type: text/x-patch, Size: 1812 bytes --]
diff -purN nsa/selinux-usr/libsepol/include/sepol/sidtab.h nsa-selinux-usr/libsepol/include/sepol/sidtab.h
--- nsa/selinux-usr/libsepol/include/sepol/sidtab.h 2005-07-13 15:42:37.000000000 -0400
+++ nsa-selinux-usr/libsepol/include/sepol/sidtab.h 2005-08-24 17:40:19.000000000 -0400
@@ -72,6 +72,11 @@ extern void sepol_sidtab_set(sidtab_t *d
extern void sepol_sidtab_shutdown(sidtab_t *s);
+typedef void (* sepol_sidtab_lock_func)(sidtab_t *);
+extern void sepol_sidtab_set_init_func(sepol_sidtab_lock_func func);
+extern void sepol_sidtab_set_lock_func(sepol_sidtab_lock_func func);
+extern void sepol_sidtab_set_unlock_func(sepol_sidtab_lock_func func);
+
#endif /* _SIDTAB_H_ */
/* FLASK */
diff -purN nsa/selinux-usr/libsepol/src/sidtab.c nsa-selinux-usr/libsepol/src/sidtab.c
--- nsa/selinux-usr/libsepol/src/sidtab.c 2005-05-13 15:53:31.000000000 -0400
+++ nsa-selinux-usr/libsepol/src/sidtab.c 2005-08-24 17:28:06.000000000 -0400
@@ -23,6 +23,14 @@
#define SIDTAB_LOCK(s)
#define SIDTAB_UNLOCK(s)
+static void do_no_lock_func(sidtab_t *s __attribute__((unused))) {
+ /* as the name suggests, this function does not do anything */
+}
+
+static sepol_sidtab_lock_func INIT_SIDTAB_LOCK = do_no_lock_func;
+static sepol_sidtab_lock_func SIDTAB_LOCK = do_no_lock_func;
+static sepol_sidtab_lock_func SIDTAB_UNLOCK = do_no_lock_func;
+
int sepol_sidtab_init(sidtab_t *s)
{
int i;
@@ -334,5 +342,17 @@ void sepol_sidtab_shutdown(sidtab_t *s)
SIDTAB_UNLOCK(s);
}
+void sepol_sidtab_set_init_func(sepol_sidtab_lock_func func) {
+ INIT_SIDTAB_LOCK = func;
+}
+
+void sepol_sidtab_set_lock_func(sepol_sidtab_lock_func func) {
+ SIDTAB_LOCK = func;
+}
+
+void sepol_sidtab_set_unlock_func(sepol_sidtab_lock_func func) {
+ SIDTAB_UNLOCK = func;
+}
+
/* FLASK */
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: corrected sidtab locking patch
2005-08-26 17:14 ` corrected sidtab locking patch Jason Tang
@ 2005-08-26 17:38 ` Stephen Smalley
2005-08-26 18:12 ` Stephen Smalley
0 siblings, 1 reply; 3+ messages in thread
From: Stephen Smalley @ 2005-08-26 17:38 UTC (permalink / raw)
To: Jason Tang; +Cc: selinux
On Fri, 2005-08-26 at 13:14 -0400, Jason Tang wrote:
> The following patch allows a program to enable locking in
> libsepol/sidtab.c. By default sidtab.c does not lock the sidtab when
> adding and removing entries; this causes problems for multi-threaded
> programs using it. Programs may set up function pointers to perform
> locking as they see fit.
- Patch doesn't remove the legacy #define's for the old locking macros.
In fact, it would be better to name the static functions differently and
change the #define's to expand to the new functions instead of just
directly defining the functions with those names.
- Are you sure that this is now thread-safe? Kernel-side code was also
relying on other aspects, e.g. use of wmb() during sidtab_insert to
ensure that we can safely walk the lists lock-free in sidtab_search, and
also used atomic (non-blocking) allocation when holding the lock.
- There are certainly other aspects of libsepol that are not presently
thread-safe. One obvious example is its copy of services.c, which lacks
the locking present in the kernel version. Do you allow policy reloads?
--
Stephen Smalley
National Security Agency
--
This message was distributed to subscribers of the selinux mailing list.
If you no longer wish to subscribe, send mail to majordomo@tycho.nsa.gov with
the words "unsubscribe selinux" without quotes as the message.
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: corrected sidtab locking patch
2005-08-26 17:38 ` Stephen Smalley
@ 2005-08-26 18:12 ` Stephen Smalley
0 siblings, 0 replies; 3+ messages in thread
From: Stephen Smalley @ 2005-08-26 18:12 UTC (permalink / raw)
To: Jason Tang; +Cc: selinux
On Fri, 2005-08-26 at 13:39 -0400, Stephen Smalley wrote:
> On Fri, 2005-08-26 at 13:14 -0400, Jason Tang wrote:
> > The following patch allows a program to enable locking in
> > libsepol/sidtab.c. By default sidtab.c does not lock the sidtab when
> > adding and removing entries; this causes problems for multi-threaded
> > programs using it. Programs may set up function pointers to perform
> > locking as they see fit.
>
> - Patch doesn't remove the legacy #define's for the old locking macros.
> In fact, it would be better to name the static functions differently and
> change the #define's to expand to the new functions instead of just
> directly defining the functions with those names.
>
> - Are you sure that this is now thread-safe? Kernel-side code was also
> relying on other aspects, e.g. use of wmb() during sidtab_insert to
> ensure that we can safely walk the lists lock-free in sidtab_search, and
> also used atomic (non-blocking) allocation when holding the lock.
>
> - There are certainly other aspects of libsepol that are not presently
> thread-safe. One obvious example is its copy of services.c, which lacks
> the locking present in the kernel version. Do you allow policy reloads?
BTW, it might be simpler to just do coarse-grained locking in the
calling application around all calls to libsepol.
--
Stephen Smalley
National Security Agency
--
This message was distributed to subscribers of the selinux mailing list.
If you no longer wish to subscribe, send mail to majordomo@tycho.nsa.gov with
the words "unsubscribe selinux" without quotes as the message.
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2005-08-26 18:12 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <1125074025.5306.9.camel@localhost.localdomain>
[not found] ` <430F4824.4090802@tresys.com>
2005-08-26 17:14 ` corrected sidtab locking patch Jason Tang
2005-08-26 17:38 ` Stephen Smalley
2005-08-26 18:12 ` Stephen Smalley
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.