Catherine Zhang
877ce7c1b3
[AF_UNIX]: Datagram getpeersec
...
This patch implements an API whereby an application can determine the
label of its peer's Unix datagram sockets via the auxiliary data mechanism of
recvmsg.
Patch purpose:
This patch enables a security-aware application to retrieve the
security context of the peer of a Unix datagram socket. The application
can then use this security context to determine the security context for
processing on behalf of the peer who sent the packet.
Patch design and implementation:
The design and implementation is very similar to the UDP case for INET
sockets. Basically we build upon the existing Unix domain socket API for
retrieving user credentials. Linux offers the API for obtaining user
credentials via ancillary messages (i.e., out of band/control messages
that are bundled together with a normal message). To retrieve the security
context, the application first indicates to the kernel such desire by
setting the SO_PASSSEC option via getsockopt. Then the application
retrieves the security context using the auxiliary data mechanism.
An example server application for Unix datagram socket should look like this:
toggle = 1;
toggle_len = sizeof(toggle);
setsockopt(sockfd, SOL_SOCKET, SO_PASSSEC, &toggle, &toggle_len);
recvmsg(sockfd, &msg_hdr, 0);
if (msg_hdr.msg_controllen > sizeof(struct cmsghdr)) {
cmsg_hdr = CMSG_FIRSTHDR(&msg_hdr);
if (cmsg_hdr->cmsg_len <= CMSG_LEN(sizeof(scontext)) &&
cmsg_hdr->cmsg_level == SOL_SOCKET &&
cmsg_hdr->cmsg_type == SCM_SECURITY) {
memcpy(&scontext, CMSG_DATA(cmsg_hdr), sizeof(scontext));
}
}
sock_setsockopt is enhanced with a new socket option SOCK_PASSSEC to allow
a server socket to receive security context of the peer.
Testing:
We have tested the patch by setting up Unix datagram client and server
applications. We verified that the server can retrieve the security context
using the auxiliary data mechanism of recvmsg.
Signed-off-by: Catherine Zhang <cxzhang@watson.ibm.com>
Acked-by: Acked-by: James Morris <jmorris@namei.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
2006-06-29 16:58:06 -07:00
..
sn
[IA64-SGI] - Pass OS logical cpu number to the SN prom (bios)
2006-06-28 09:56:55 -07:00
a.out.h
acpi-ext.h
[IA64] update HP CSR space discovery via ACPI
2006-04-06 14:42:38 -07:00
acpi.h
[IA64] - Fix MAX_PXM_DOMAINS for systems with > 256 nodes
2006-04-20 10:16:11 -07:00
agp.h
asmmacro.h
Don't include linux/config.h from anywhere else in include/
2006-04-26 12:56:16 +01:00
atomic.h
[PATCH] atomic: add_unless cmpxchg optimise
2006-03-23 07:38:17 -08:00
auxvec.h
[PATCH] auxiliary vector cleanups
2005-09-07 16:57:21 -07:00
bitops.h
[IA64] remove asm-ia64/bitops.h self-inclusion
2006-05-05 11:37:15 -07:00
break.h
bug.h
[PATCH] remove gcc-2 checks
2006-01-08 20:14:02 -08:00
bugs.h
byteorder.h
cache.h
Don't include linux/config.h from anywhere else in include/
2006-04-26 12:56:16 +01:00
cacheflush.h
checksum.h
compat.h
[PATCH] ia64: add ptr_to_compat()
2006-03-27 08:44:48 -08:00
cpu.h
cputime.h
current.h
cyclone.h
delay.h
Don't include linux/config.h from anywhere else in include/
2006-04-26 12:56:16 +01:00
div64.h
dma-mapping.h
Don't include linux/config.h from anywhere else in include/
2006-04-26 12:56:16 +01:00
dma.h
Don't include linux/config.h from anywhere else in include/
2006-04-26 12:56:16 +01:00
dmi.h
[PATCH] ia64: use i386 dmi_scan.c
2006-03-26 08:56:54 -08:00
elf.h
Don't include linux/config.h from anywhere else in include/
2006-04-26 12:56:16 +01:00
emergency-restart.h
errno.h
fcntl.h
[PATCH] Clean up struct flock definitions
2005-09-07 16:57:38 -07:00
fpswa.h
fpu.h
futex.h
[PATCH] consolidate asm/futex.h
2006-01-08 20:13:39 -08:00
gcc_intrin.h
hardirq.h
Don't include linux/config.h from anywhere else in include/
2006-04-26 12:56:16 +01:00
hw_irq.h
[PATCH] genirq: add ->retrigger() irq op to consolidate hw_irq_resend()
2006-06-29 10:26:23 -07:00
ia32.h
Don't include linux/config.h from anywhere else in include/
2006-04-26 12:56:16 +01:00
ia64regs.h
ide.h
Don't include linux/config.h from anywhere else in include/
2006-04-26 12:56:16 +01:00
intel_intrin.h
[IA64] use icc defined constant
2006-02-07 08:49:27 -08:00
intrinsics.h
Don't include linux/config.h from anywhere else in include/
2006-04-26 12:56:16 +01:00
io.h
[IA64] rework memory attribute aliasing
2006-05-08 16:32:05 -07:00
ioctl.h
[PATCH] Generic ioctl.h
2006-01-10 08:01:34 -08:00
ioctls.h
iosapic.h
[IA64] Minor cleanups - remove unnecessary function prototype in iosapic.h
2005-09-07 14:00:40 -07:00
ipcbuf.h
irq.h
[PATCH] genirq: cleanup: turn ARCH_HAS_IRQ_PER_CPU into CONFIG_IRQ_PER_CPU
2006-06-29 10:26:23 -07:00
kdebug.h
[PATCH] Notify page fault call chain for ia64
2006-06-26 09:58:22 -07:00
kmap_types.h
Don't include linux/config.h from anywhere else in include/
2006-04-26 12:56:16 +01:00
kprobes.h
[PATCH] Notify page fault call chain
2006-06-26 09:58:22 -07:00
kregs.h
linkage.h
[PATCH] abstract type/size specification for assembly
2006-03-24 07:33:25 -08:00
local.h
[IA64] Fix missing parameter for local_add/sub
2005-12-07 11:30:11 -08:00
machvec.h
[PATCH] PCI: msi abstractions and support for altix
2006-06-21 11:59:58 -07:00
machvec_dig.h
[IA64] cleanup dig_irq_init
2006-03-24 13:12:46 -08:00
machvec_hpsim.h
machvec_hpzx1.h
[IA64] more robust zx1/sx1000 machvec support
2005-09-14 16:22:11 -07:00
machvec_hpzx1_swiotlb.h
[IA64] more robust zx1/sx1000 machvec support
2005-09-14 16:22:11 -07:00
machvec_init.h
machvec_sn2.h
[PATCH] PCI: msi abstractions and support for altix
2006-06-21 11:59:58 -07:00
mc146818rtc.h
mca.h
[IA64] Sanitize assembler code for ia64_sal_os_state
2006-06-21 14:44:26 -07:00
mca_asm.h
[PATCH] MCA/INIT: use per cpu stacks
2005-09-11 14:08:41 -07:00
meminit.h
Don't include linux/config.h from anywhere else in include/
2006-04-26 12:56:16 +01:00
mman.h
[PATCH] add asm-generic/mman.h
2006-02-15 15:32:22 -08:00
mmu.h
mmu_context.h
[IA64] make mmu_context.h and tlb.c 80-column friendly
2005-11-03 14:43:50 -08:00
mmzone.h
[PATCH] V5 ia64 SPARSEMEM - conditional changes for SPARSEMEM
2005-10-04 13:21:13 -07:00
module.h
msgbuf.h
msi.h
[PATCH] PCI: msi abstractions and support for altix
2006-06-21 11:59:58 -07:00
mutex.h
[IA64] fix bug in ia64 __mutex_fastpath_trylock
2006-04-07 22:39:49 -07:00
namei.h
nodedata.h
[PATCH] pgdat allocation and update for ia64 of memory hotplug: update pgdat address array
2006-06-27 17:32:37 -07:00
numa.h
Don't include linux/config.h from anywhere else in include/
2006-04-26 12:56:16 +01:00
page.h
Don't include linux/config.h from anywhere else in include/
2006-04-26 12:56:16 +01:00
pal.h
[IA64] Avoid "u64 foo : 32;" for gcc3 vs. gcc4 compatibility
2006-03-31 10:28:29 -08:00
param.h
Don't include linux/config.h from anywhere else in include/
2006-04-26 12:56:16 +01:00
parport.h
patch.h
pci.h
[PATCH] Make sparc64 use setup-res.c
2005-09-08 14:57:25 -07:00
percpu.h
[PATCH] Define __raw_get_cpu_var and use it
2006-06-25 10:01:01 -07:00
perfmon.h
perfmon_default_smpl.h
pgalloc.h
Don't include linux/config.h from anywhere else in include/
2006-04-26 12:56:16 +01:00
pgtable.h
Pull rework-memory-attribute-aliasing into release branch
2006-06-21 14:50:10 -07:00
poll.h
[PATCH] POLLRDHUP/EPOLLRDHUP handling for half-closed devices notifications
2006-03-25 08:22:56 -08:00
posix_types.h
processor.h
Don't include linux/config.h from anywhere else in include/
2006-04-26 12:56:16 +01:00
ptrace.h
Don't include linux/config.h from anywhere else in include/
2006-04-26 12:56:16 +01:00
ptrace_offsets.h
resource.h
rse.h
rwsem.h
[PATCH] add sem_is_read/write_locked()
2005-10-29 21:40:35 -07:00
sal.h
[IA64] avoid broken SAL_CACHE_FLUSH implementations
2006-02-02 13:25:54 -08:00
scatterlist.h
sections.h
segment.h
semaphore.h
[IA64] Fix bug in ia64 specific down() function
2006-01-17 14:04:00 -08:00
sembuf.h
serial.h
setup.h
shmbuf.h
shmparam.h
sigcontext.h
siginfo.h
signal.h
[IA64] Delete MCA/INIT sigdelayed code
2006-01-26 13:23:27 -08:00
smp.h
Don't include linux/config.h from anywhere else in include/
2006-04-26 12:56:16 +01:00
socket.h
[AF_UNIX]: Datagram getpeersec
2006-06-29 16:58:06 -07:00
sockios.h
sparsemem.h
[PATCH] V5 ia64 SPARSEMEM - conditional changes for SPARSEMEM
2005-10-04 13:21:13 -07:00
spinlock.h
[PATCH] remove gcc-2 checks
2006-01-08 20:14:02 -08:00
spinlock_types.h
[PATCH] spinlock consolidation
2005-09-10 10:06:21 -07:00
stat.h
statfs.h
string.h
Don't include linux/config.h from anywhere else in include/
2006-04-26 12:56:16 +01:00
suspend.h
system.h
Don't include linux/config.h from anywhere else in include/
2006-04-26 12:56:16 +01:00
termbits.h
termios.h
thread_info.h
[PATCH] i386/x86-64/ia64: Move polling flag into thread_info_status
2006-06-26 10:48:21 -07:00
timex.h
[IA64] ia64: simplify and fix udelay()
2006-02-15 13:37:04 -08:00
tlb.h
Don't include linux/config.h from anywhere else in include/
2006-04-26 12:56:16 +01:00
tlbflush.h
Don't include linux/config.h from anywhere else in include/
2006-04-26 12:56:16 +01:00
topology.h
[PATCH] sched: mc/smt power savings sched policy
2006-06-27 17:32:45 -07:00
types.h
uaccess.h
[PATCH] ia64 basic __user annotations
2005-09-29 08:46:27 -07:00
ucontext.h
unaligned.h
uncached.h
unistd.h
[PATCH] page migration: sys_move_pages(): support moving of individual pages
2006-06-23 07:42:53 -07:00
unwind.h
[IA64] MCA/INIT: remove obsolete unwind code
2005-09-11 14:09:34 -07:00
user.h
ustack.h
vga.h
[PATCH] vgacon: make VGA_MAP_MEM take size, remove extra use
2006-06-22 15:05:58 -07:00
xor.h