lineage_android_kernel_sams.../Documentation
Casey Schaufler e114e47377 Smack: Simplified Mandatory Access Control Kernel
Smack is the Simplified Mandatory Access Control Kernel.

Smack implements mandatory access control (MAC) using labels
attached to tasks and data containers, including files, SVIPC,
and other tasks. Smack is a kernel based scheme that requires
an absolute minimum of application support and a very small
amount of configuration data.

Smack uses extended attributes and
provides a set of general mount options, borrowing technics used
elsewhere. Smack uses netlabel for CIPSO labeling. Smack provides
a pseudo-filesystem smackfs that is used for manipulation of
system Smack attributes.

The patch, patches for ls and sshd, a README, a startup script,
and x86 binaries for ls and sshd are also available on

    http://www.schaufler-ca.com

Development has been done using Fedora Core 7 in a virtual machine
environment and on an old Sony laptop.

Smack provides mandatory access controls based on the label attached
to a task and the label attached to the object it is attempting to
access. Smack labels are deliberately short (1-23 characters) text
strings. Single character labels using special characters are reserved
for system use. The only operation applied to Smack labels is equality
comparison. No wildcards or expressions, regular or otherwise, are
used. Smack labels are composed of printable characters and may not
include "/".

A file always gets the Smack label of the task that created it.

Smack defines and uses these labels:

    "*" - pronounced "star"
    "_" - pronounced "floor"
    "^" - pronounced "hat"
    "?" - pronounced "huh"

The access rules enforced by Smack are, in order:

1. Any access requested by a task labeled "*" is denied.
2. A read or execute access requested by a task labeled "^"
   is permitted.
3. A read or execute access requested on an object labeled "_"
   is permitted.
4. Any access requested on an object labeled "*" is permitted.
5. Any access requested by a task on an object with the same
   label is permitted.
6. Any access requested that is explicitly defined in the loaded
   rule set is permitted.
7. Any other access is denied.

Rules may be explicitly defined by writing subject,object,access
triples to /smack/load.

Smack rule sets can be easily defined that describe Bell&LaPadula
sensitivity, Biba integrity, and a variety of interesting
configurations. Smack rule sets can be modified on the fly to
accommodate changes in the operating environment or even the time
of day.

Some practical use cases:

Hierarchical levels. The less common of the two usual uses
for MLS systems is to define hierarchical levels, often
unclassified, confidential, secret, and so on. To set up smack
to support this, these rules could be defined:

   C        Unclass rx
   S        C       rx
   S        Unclass rx
   TS       S       rx
   TS       C       rx
   TS       Unclass rx

A TS process can read S, C, and Unclass data, but cannot write it.
An S process can read C and Unclass. Note that specifying that
TS can read S and S can read C does not imply TS can read C, it
has to be explicitly stated.

Non-hierarchical categories. This is the more common of the
usual uses for an MLS system. Since the default rule is that a
subject cannot access an object with a different label no
access rules are required to implement compartmentalization.

A case that the Bell & LaPadula policy does not allow is demonstrated
with this Smack access rule:

A case that Bell&LaPadula does not allow that Smack does:

    ESPN    ABC   r
    ABC     ESPN  r

On my portable video device I have two applications, one that
shows ABC programming and the other ESPN programming. ESPN wants
to show me sport stories that show up as news, and ABC will
only provide minimal information about a sports story if ESPN
is covering it. Each side can look at the other's info, neither
can change the other. Neither can see what FOX is up to, which
is just as well all things considered.

Another case that I especially like:

    SatData Guard   w
    Guard   Publish w

A program running with the Guard label opens a UDP socket and
accepts messages sent by a program running with a SatData label.
The Guard program inspects the message to ensure it is wholesome
and if it is sends it to a program running with the Publish label.
This program then puts the information passed in an appropriate
place. Note that the Guard program cannot write to a Publish
file system object because file system semanitic require read as
well as write.

The four cases (categories, levels, mutual read, guardbox) here
are all quite real, and problems I've been asked to solve over
the years. The first two are easy to do with traditonal MLS systems
while the last two you can't without invoking privilege, at least
for a while.

Signed-off-by: Casey Schaufler <casey@schaufler-ca.com>
Cc: Joshua Brindle <method@manicmethod.com>
Cc: Paul Moore <paul.moore@hp.com>
Cc: Stephen Smalley <sds@tycho.nsa.gov>
Cc: Chris Wright <chrisw@sous-sol.org>
Cc: James Morris <jmorris@namei.org>
Cc: "Ahmed S. Darwish" <darwish.07@gmail.com>
Cc: Andrew G. Morgan <morgan@kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2008-02-05 09:44:20 -08:00
..
ABI USB: Add documentation for USB suspend statistics. 2008-02-01 14:35:00 -08:00
DocBook docbook: rapidio: fix fatal filename error 2008-02-01 21:11:40 +11:00
RCU Preempt-RCU: update RCU Documentation. 2008-01-25 21:08:25 +01:00
accounting make getdelays cgroupstats aware 2007-11-14 18:45:38 -08:00
aoe
arm fix typo 'the same the\>' 2008-02-03 14:59:11 +02:00
auxdisplay
blackfin
block Add Documentation/block/00-INDEX 2007-10-16 10:11:28 +02:00
cdrom Convert files to UTF-8 and some cleanups 2007-10-19 23:21:04 +02:00
connector
console
cpu-freq [ARM] pxa: add cpufreq support 2008-01-26 15:07:52 +00:00
cris
crypto [CRYPTO] doc: Update api-intro.txt 2008-01-11 08:16:14 +11:00
device-mapper dm: uevent generate events 2007-10-20 02:01:26 +01:00
driver-model Driver core: Update some prototypes in platform.txt 2008-02-02 15:14:49 -08:00
drivers/edac
dvb V4L/DVB (7077): bt878: remove handcrafted PCI subsystem ID check 2008-01-25 19:05:22 -02:00
early-userspace docs: ramdisk/initrd/initramfs corrections 2007-10-17 08:42:56 -07:00
fault-injection
fb typo fixes 2007-10-20 01:34:40 +02:00
filesystems Document lowmem_reserve_ratio 2008-02-05 09:44:19 -08:00
firmware_class doc firmware_sample_firmware_class.c: kmalloc + memset conversion to kzalloc 2007-10-17 08:42:50 -07:00
frv move frv docs one level up 2008-02-03 15:54:28 +02:00
hrtimer
hrtimers
hwmon hwmon: Add power meter spec to Documentation/hwmon/sysfs-interface 2007-11-08 08:42:45 -05:00
i2c deprecate obsolete pca9539 driver 2008-02-05 09:44:13 -08:00
i2o
i386 x86 boot: document for 32 bit boot protocol 2007-10-30 00:22:22 +01:00
ia64 typo fixes 2007-10-20 01:34:40 +02:00
ide ide-tape: move historical changelog to Documentation/ide/ChangeLog.ide-tape.1995-2002 2008-02-02 19:56:48 +01:00
infiniband IB/umad: Add P_Key index support 2007-10-09 19:59:15 -07:00
input typo fixes 2007-10-20 01:34:40 +02:00
ioctl
isdn spelling fixes: Documentation/ 2007-10-20 01:30:25 +02:00
ja_JP Add ja_JP translation of stable_kernel_rules.txt 2008-02-02 15:14:48 -08:00
kbuild kconfig: document use of HAVE_* 2008-01-28 23:21:19 +01:00
kdump Add documentation for extended crashkernel syntax 2007-10-19 11:53:51 -07:00
ko_KR HOWTO: update misspelling and word incorrected 2007-12-17 10:33:19 -08:00
lguest virtio: reset function 2008-02-04 23:50:03 +11:00
m68k [SCSI] 53c7xx: fix removal fallout 2008-01-11 18:22:30 -06:00
make Documentation/make/headers_install.txt 2007-10-17 08:43:05 -07:00
mips [MIPS] remove Documentation/mips/GT64120.README 2008-01-29 10:15:05 +00:00
namespaces The namespaces compatibility list doc 2007-11-29 09:24:53 -08:00
netlabel
networking Documentation: "decnet=" should read "decnet.addr=". 2008-02-03 15:18:45 +02:00
parisc
pcmcia pcmcia: replace kio_addr_t with unsigned int everywhere 2008-02-05 09:44:08 -08:00
power PM: Remove obsolete /sys/devices/.../power/state docs 2008-02-01 18:30:59 -05:00
powerpc [POWERPC] fsl_spi: stop using device_type = "spi" 2008-01-28 08:32:58 -06:00
s390 [S390] cio: Dump ccw device information in case of timeout. 2008-01-26 14:10:55 +01:00
scsi [SCSI] aacraid: add Voodoo Lite class of cards. 2008-01-23 11:29:34 -06:00
serial
sh
sound [ALSA] hda-codec - Add Dell T3400 support 2008-01-31 17:30:22 +01:00
sparc [SPARC/64]: Prepare to remove of_platform_driver name. 2007-10-13 21:53:11 -07:00
spi Convert files to UTF-8 and some cleanups 2007-10-19 23:21:04 +02:00
sysctl mm/page-writeback: highmem_is_dirtyable option 2008-02-05 09:44:18 -08:00
telephony Add a 00-INDEX file to Documentation/telephony/ 2007-10-17 08:43:05 -07:00
uml
usb USB: add Printer Gadget Driver 2008-02-01 14:34:49 -08:00
video4linux V4L/DVB (7043): New card supported(partially): Pinnacle 800i 2008-01-25 19:05:06 -02:00
vm kset: move /sys/slab to /sys/kernel/slab 2008-01-24 20:40:16 -08:00
w1 Add Documentation/{w1,w1/masters}/00-INDEX 2007-10-17 08:43:06 -07:00
watchdog [WATCHDOG] clarify watchdog operation in documentation 2008-01-18 21:23:05 +00:00
x86_64 documentation: add Documentation/x86-64/00-INDEX 2008-02-04 16:48:02 +01:00
zh_CN Chinese: add translation of Codingstyle 2008-01-24 20:40:04 -08:00
00-INDEX move frv docs one level up 2008-02-03 15:54:28 +02:00
BUG-HUNTING Documentation/BUG-HUNTING whitespace cleanup 2008-02-03 16:26:36 +02:00
Changes
CodingStyle CodingStyle: relax the 80-cole rule 2007-10-17 08:42:55 -07:00
DMA-API.txt dma_free_coherent() needs irqs enabled (sigh) 2007-10-12 15:03:15 -07:00
DMA-ISA-LPC.txt
DMA-mapping.txt Update DMA-mapping documentation 2007-10-17 08:43:06 -07:00
HOWTO Change man-pages maintainer address 2007-10-17 08:43:01 -07:00
IO-mapping.txt
IPMI.txt IPMI: new NMI handling 2007-10-18 14:37:32 -07:00
IRQ-affinity.txt
IRQ.txt
Intel-IOMMU.txt Intel IOMMU: Iommu Gfx workaround 2007-10-22 08:13:19 -07:00
MSI-HOWTO.txt PCI: Remove no longer correct documentation regarding MSI vector assignment 2007-10-12 15:03:16 -07:00
ManagementStyle
PCIEBUS-HOWTO.txt
README.DAC960
README.cycladesZ
SAK.txt
SM501.txt Tweak Documentation/SM501.txt 2007-10-17 08:43:06 -07:00
SecurityBugs
Smack.txt Smack: Simplified Mandatory Access Control Kernel 2008-02-05 09:44:20 -08:00
SubmitChecklist Documentation: Fix typo in SubmitChecklist. 2007-10-20 03:13:09 +02:00
SubmittingDrivers Update 2.4 maintainer in document 2007-10-20 02:02:12 +02:00
SubmittingPatches Documentation: mention email-clients.txt in SubmittingPatches 2008-02-03 18:06:58 +02:00
VGA-softcursor.txt
applying-patches.txt
atomic_ops.txt bitops: introduce lock ops 2007-10-18 14:37:29 -07:00
basic_profiling.txt
binfmt_misc.txt
cachetlb.txt remove unused flush_tlb_pgtables 2007-10-19 11:53:34 -07:00
cciss.txt
cgroups.txt Task Control Groups: shared cgroup subsystem group arrays 2007-10-19 11:53:36 -07:00
cli-sti-removal.txt
computone.txt
cpqarray.txt
cpu-hotplug.txt [S390] Get rid of additional_cpus kernel parameter. 2008-01-26 14:11:15 +01:00
cpu-load.txt
cpusets.txt cpuset sched_load_balance flag 2007-10-19 11:53:41 -07:00
cputopology.txt
dcdbas.txt
debugging-modules.txt Documentation: Clarify when module debugging actually works. 2008-02-03 15:27:38 +02:00
debugging-via-ohci1394.txt x86: early boot debugging via FireWire (ohci1394_dma=early) 2008-01-30 13:34:11 +01:00
dell_rbu.txt
devices.txt typo fixes 2007-10-20 01:34:40 +02:00
digiepca.txt
dnotify.txt
dontdiff [SCSI] 53c7xx: fix removal fallout 2008-01-11 18:22:30 -06:00
eisa.txt
email-clients.txt doc: about email clients for Linux patches 2007-10-17 08:42:57 -07:00
exception.txt
feature-removal-schedule.txt USB: mark USB drivers as being GPL only 2008-02-01 14:35:07 -08:00
floppy.txt
gpio.txt gpiolib: update Documentation/gpio.txt 2008-02-05 09:44:13 -08:00
hayes-esp.txt
highuid.txt
hpet.txt
hw_random.txt
ide.txt ide: remove broken disk byte-swapping support 2008-01-26 20:13:09 +01:00
initrd.txt use the newc archive format as requested by initramfs 2008-02-03 14:54:41 +02:00
io_ordering.txt
ioctl-number.txt ocfs2: Reserve ioctl range 2008-01-25 14:48:57 -08:00
iostats.txt
irqflags-tracing.txt
isapnp.txt
java.txt Documentation/java.txt: typo and grammar fixes 2007-10-20 02:37:21 +02:00
kernel-doc-nano-HOWTO.txt
kernel-docs.txt typo fixes 2007-10-20 01:34:40 +02:00
kernel-parameters.txt Documentation: Remove references to dead "st0x" and "tmc8xx" parms. 2008-02-03 15:23:00 +02:00
keys-request-key.txt KEYS: Make request_key() and co fundamentally asynchronous 2007-10-17 08:42:57 -07:00
keys.txt KEYS: Make request_key() and co fundamentally asynchronous 2007-10-17 08:42:57 -07:00
kobject.txt kobject: update the kobject/kset documentation 2008-01-24 20:40:41 -08:00
kprobes.txt ARM kprobes: let's enable it 2008-01-26 15:25:17 +00:00
kref.txt
laptop-mode.txt
ldm.txt
leds-class.txt
local_ops.txt Revert "local_t Documentation update" 2008-01-17 15:38:59 -08:00
lockdep-design.txt
lockstat.txt
logo.gif
logo.txt
magic-number.txt
markers.txt Linux Kernel Markers: document format string 2007-11-14 18:45:40 -08:00
mca.txt
md.txt
memory-barriers.txt bitops: introduce lock ops 2007-10-18 14:37:29 -07:00
memory-hotplug.txt memory hotplug: document the memory hotplug notifier 2007-10-22 08:13:17 -07:00
memory.txt
mono.txt
moxa-smartio
mtrr.txt
mutex-design.txt Documentation: Add nested versions of mutex locks to docs 2007-10-20 00:15:26 +02:00
nbd.txt
nfsroot.txt [IPV4] ipconfig: Fix regression in ip command line processing 2008-01-08 23:29:58 -08:00
nmi_watchdog.txt
nommu-mmap.txt
numastat.txt
oops-tracing.txt
paride.txt
parport-lowlevel.txt plip: fix parport_register_device name parameter 2007-11-26 19:39:01 -08:00
parport.txt
pci-error-recovery.txt
pci.txt PCI: Remove pci_enable_device_bars() from documentation 2008-02-01 15:04:28 -08:00
pcieaer-howto.txt
pi-futex.txt
pm.txt
pnp.txt Documentation: Replace obsolete "driverfs" with "sysfs". 2008-01-24 20:40:04 -08:00
power_supply_class.txt power_supply: add few more values and props 2008-02-02 02:43:00 +03:00
preempt-locking.txt
prio_tree.txt
ramdisk.txt Remove final traces of long-deprecated "ramdisk" kernel parm 2007-10-17 08:42:56 -07:00
rbtree.txt
rfkill.txt [RFKILL]: Add rfkill documentation 2007-10-10 16:49:24 -07:00
riscom8.txt
robust-futex-ABI.txt
robust-futexes.txt
rocket.txt
rpc-cache.txt
rt-mutex-design.txt
rt-mutex.txt
rtc.txt rtc: tweak driver documentation for rtc periodic 2007-11-14 18:45:37 -08:00
sched-arch.txt
sched-coding.txt
sched-design-CFS.txt sched: group scheduling, sysfs tunables 2007-10-15 17:00:14 +02:00
sched-design.txt
sched-domains.txt
sched-nice-design.txt
sched-stats.txt
serial-console.txt
sgi-ioc4.txt
sgi-visws.txt
sharedsubtree.txt Fix compiler warning in smount example program from sharedsubtree.txt 2007-10-20 02:44:34 +02:00
smart-config.txt
sony-laptop.txt
sonypi.txt
sparse.txt
specialix.txt
spinlocks.txt
stable_api_nonsense.txt
stable_kernel_rules.txt
stallion.txt
svga.txt
sx.txt
sysfs-rules.txt
sysrq.txt
thinkpad-acpi.txt ACPI: thinkpad-acpi: bump up version to 0.17 2007-11-05 13:07:11 -05:00
tty.txt termios: document callback more clearly 2007-11-29 09:24:52 -08:00
unicode.txt
unshare.txt
video-output.txt
volatile-considered-harmful.txt
voyager.txt
zorro.txt

README.cycladesZ

The Cyclades-Z must have firmware loaded onto the card before it will
operate.  This operation should be performed during system startup,

The firmware, loader program and the latest device driver code are
available from Cyclades at
    ftp://ftp.cyclades.com/pub/cyclades/cyclades-z/linux/