linux-stable-rt/include/linux
David Howells 04c567d931 [PATCH] Keys: Fix race between two instantiators of a key
Add a revocation notification method to the key type and calls it whilst
the key's semaphore is still write-locked after setting the revocation
flag.

The patch then uses this to maintain a reference on the task_struct of the
process that calls request_key() for as long as the authorisation key
remains unrevoked.

This fixes a potential race between two processes both of which have
assumed the authority to instantiate a key (one may have forked the other
for example).  The problem is that there's no locking around the check for
revocation of the auth key and the use of the task_struct it points to, nor
does the auth key keep a reference on the task_struct.

Access to the "context" pointer in the auth key must thenceforth be done
with the auth key semaphore held.  The revocation method is called with the
target key semaphore held write-locked and the search of the context
process's keyrings is done with the auth key semaphore read-locked.

The check for the revocation state of the auth key just prior to searching
it is done after the auth key is read-locked for the search.  This ensures
that the auth key can't be revoked between the check and the search.

The revocation notification method is added so that the context task_struct
can be released as soon as instantiation happens rather than waiting for
the auth key to be destroyed, thus avoiding the unnecessary pinning of the
requesting process.

Signed-off-by: David Howells <dhowells@redhat.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2006-06-22 15:05:56 -07:00
..
amba
byteorder
dvb
hdlc
isdn
lockd
mmc [ARM] 3531/1: i.MX/MX1 SD/MMC ensure, that clock are stopped before new command and cleanups 2006-05-19 21:48:03 +01:00
mtd Merge git://git.infradead.org/hdrcleanup-2.6 2006-06-20 15:10:08 -07:00
netfilter Merge git://git.infradead.org/hdrcleanup-2.6 2006-06-20 15:10:08 -07:00
netfilter_arp
netfilter_bridge
netfilter_ipv4 Merge git://git.infradead.org/hdrcleanup-2.6 2006-06-20 15:10:08 -07:00
netfilter_ipv6
nfsd
raid
spi [PATCH] SPI: busnum == 0 needs to work 2006-05-16 14:33:57 -07:00
sunrpc
tc_act
tc_ematch
usb [PATCH] USB: move <linux/usb_input.h> to <linux/usb/input.h> 2006-06-21 15:04:18 -07:00
8250_pci.h
a.out.h
ac97_codec.h
acct.h
acpi.h
adb.h
adfs_fs.h
adfs_fs_i.h
adfs_fs_sb.h
affs_fs.h
affs_hardblocks.h Include <linux/types.h> and use __uXX types in <linux/affs_hardblocks.h> 2006-05-04 15:49:24 +01:00
agp_backend.h
agpgart.h
aio.h
aio_abi.h
amifd.h
amifdreg.h
amigaffs.h
apm_bios.h
arcdevice.h
arcfb.h
ata.h
atalk.h
atm.h
atm_eni.h
atm_he.h
atm_idt77105.h
atm_nicstar.h
atm_suni.h
atm_tcp.h
atm_zatm.h
atmapi.h
atmarp.h
atmbr2684.h
atmclip.h
atmdev.h
atmioc.h
atmlec.h
atmmpc.h
atmppp.h
atmsap.h
atmsvc.h
attribute_container.h
audit.h Merge branch 'audit.b21' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/audit-current 2006-06-20 15:37:56 -07:00
auto_fs.h
auto_fs4.h
auxvec.h
awe_voice.h
ax25.h
b1lli.h
b1pcmcia.h
backing-dev.h
backlight.h
baycom.h
bcd.h
bfs_fs.h
binfmts.h
bio.h
bit_spinlock.h
bitmap.h
bitops.h
blkdev.h Merge master.kernel.org:/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6 2006-06-21 11:18:25 -07:00
blkpg.h
blktrace_api.h
blockgroup_lock.h
bootmem.h
bpqether.h
buffer_head.h
cache.h
calc64.h
capability.h
capi.h
cciss_ioctl.h
cd1400.h
cdev.h
cdk.h
cdrom.h
chio.h
circ_buf.h
clk.h
cm4000_cs.h
cn_proc.h
cobalt-nvram.h
coda.h
coda_cache.h
coda_fs_i.h
coda_linux.h
coda_proc.h
coda_psdev.h
coff.h
com20020.h
compat.h
compat_ioctl.h
compiler-gcc.h
compiler-gcc3.h
compiler-gcc4.h
compiler-intel.h
compiler.h Restore __attribute_const__ to user-visibility in linux/compiler.h...for now 2006-05-04 00:41:02 +01:00
completion.h
comstats.h
concap.h
config.h
configfs.h
connector.h
console.h Add support for suspending and resuming the whole console subsystem 2006-06-19 18:16:01 -07:00
console_struct.h
consolemap.h
cpu.h
cpufreq.h
cpumask.h
cpuset.h
cramfs_fs.h Include <linux/types.h> and use __uXX types in <linux/cramfs_fs.h> 2006-05-04 17:50:04 +01:00
cramfs_fs_sb.h
crash_dump.h
crc-ccitt.h
crc16.h
crc32.h
crc32c.h
crypto.h
cryptohash.h
ctype.h
cuda.h
cyclades.h
cyclomx.h
cycx_cfm.h
cycx_drv.h
cycx_x25.h
dcache.h
dccp.h
dcookies.h
debugfs.h [PATCH] Fix OCFS2 warning when DEBUG_FS is not enabled 2006-04-27 13:08:56 -07:00
delay.h
devfs_fs.h
devfs_fs_kernel.h
device-mapper.h
device.h [PATCH] Driver Core: Make dev_info and friends print the bus name if there is no driver 2006-06-21 12:40:49 -07:00
devpts_fs.h
dio.h
dirent.h
divert.h Use __uXX types in <linux/divert.h> for struct divert_blk et al. 2006-05-04 15:07:59 +01:00
dm-ioctl.h
dm9000.h
dma-mapping.h dl2k: use DMA_48BIT_MASK constant 2006-05-10 14:04:22 -07:00
dmaengine.h [I/OAT]: Utility functions for offloading sk_buff to iovec copies 2006-06-17 21:25:46 -07:00
dmapool.h
dmi.h
dn.h
dnotify.h
dqblk_v1.h
dqblk_v2.h
dqblk_xfs.h
ds1286.h
ds1742rtc.h
ds17287rtc.h
dtlk.h
edd.h
efi.h
efs_dir.h
efs_fs.h
efs_fs_i.h
efs_fs_sb.h
efs_vh.h
eisa.h
elevator.h [PATCH] elevator switching race 2006-06-08 15:14:23 -07:00
elf-em.h
elf-fdpic.h
elf.h
elfcore.h
err.h
errno.h
errqueue.h
etherdevice.h
ethtool.h Sanitise ethtool.h and mii.h for userspace. 2006-04-29 01:53:47 +01:00
eventpoll.h
ext2_fs.h
ext2_fs_sb.h
ext3_fs.h Remove private struct dx_hash_info from public view in <linux/ext3_fs.h> 2006-05-04 17:28:26 +01:00
ext3_fs_i.h
ext3_fs_sb.h
ext3_jbd.h
fadvise.h
fb.h
fcdevice.h
fcntl.h
fd.h
fd1772.h
fddidevice.h
fdreg.h
file.h
filter.h
firmware.h [PATCH] drivers/base/firmware_class.c: cleanups 2006-05-21 12:59:19 -07:00
flat.h
font.h
fs.h Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6 2006-05-24 09:22:21 +01:00
fs_enet_pd.h
fs_struct.h
fs_uart_pd.h [PATCH] ppc32 CPM_UART: fixes and improvements 2006-05-03 23:06:44 +10:00
fsl_devices.h [PATCH] spi: add spi master driver for Freescale MPC83xx SPI controller 2006-05-21 12:59:19 -07:00
fsnotify.h [PATCH] log more info for directory entry change events 2006-06-20 05:25:28 -04:00
ftape-header-segment.h
ftape-vendors.h
ftape.h
fuse.h
futex.h
gameport.h
gen_stats.h
genalloc.h
generic_serial.h
genetlink.h
genhd.h
gfp.h
gigaset_dev.h
hardirq.h
harrier_defs.h
hash.h
hayesesp.h
hdlc.h
hdlcdrv.h
hdpu_features.h
hdreg.h
hdsmart.h
hiddev.h
highmem.h
highuid.h
hil.h
hil_mlc.h
hippidevice.h
hp_sdc.h
hpet.h
hpfs_fs.h
hrtimer.h
hugetlb.h
hwmon-sysfs.h
hwmon-vid.h
hwmon.h
hysdn_if.h
i2c-algo-bit.h
i2c-algo-ite.h
i2c-algo-pca.h
i2c-algo-pcf.h
i2c-algo-sgi.h
i2c-algo-sibyte.h
i2c-dev.h
i2c-id.h
i2c-isa.h
i2c-pxa.h
i2c.h
i2o-dev.h Use __uXX types in <linux/i2o_dev.h>, include <linux/ioctl.h> too 2006-05-04 17:32:44 +01:00
i2o.h [PATCH] I2O: Bugfixes to get I2O working again 2006-06-10 11:02:05 -07:00
i8k.h
ibmtr.h
icmp.h
icmpv6.h
ide.h
idr.h
if.h
if_arcnet.h
if_arp.h
if_bonding.h
if_bridge.h
if_cablemodem.h
if_ec.h
if_eql.h
if_ether.h
if_fc.h
if_fddi.h Remove struct fddi_statistics from user view in <linux/if_fddi.h> 2006-05-16 23:25:37 +01:00
if_frad.h
if_hippi.h
if_infiniband.h
if_ltalk.h
if_packet.h
if_plip.h
if_ppp.h
if_pppox.h
if_shaper.h
if_slip.h
if_strip.h
if_tr.h
if_tun.h
if_tunnel.h
if_vlan.h
if_wanpipe.h
if_wanpipe_common.h
igmp.h [IPV4] igmp: Fixup struct ip_mc_list::multiaddr type 2006-06-17 21:29:37 -07:00
in.h
in6.h
in_route.h
inet.h
inet_diag.h
inetdevice.h
init.h
init_task.h
initrd.h
inotify.h [PATCH] inotify (4/5): allow watch removal from event handler 2006-06-20 05:25:19 -04:00
input.h Merge git://git.infradead.org/hdrcleanup-2.6 2006-06-20 15:10:08 -07:00
interrupt.h
io.h [PATCH] add __iowrite64_copy 2006-06-20 20:24:58 -07:00
ioc3.h
ioc4.h
ioctl.h
ioctl32.h
ioport.h
ioprio.h
ip.h
ip6_tunnel.h
ip_mp_alg.h
ipc.h
ipmi.h
ipmi_msgdefs.h
ipmi_smi.h
ipsec.h
ipv6.h
ipv6_route.h
ipx.h
irda.h
irq.h
irq_cpustat.h
isa.h [PATCH] Driver model: add ISA bus 2006-06-21 12:40:49 -07:00
isapnp.h
isdn.h
isdn_divertif.h
isdn_ppp.h
isdnif.h
isicom.h
iso_fs.h
istallion.h
ite_gpio.h
ixjuser.h
jbd.h
jffs.h
jffs2.h Merge git://git.infradead.org/jffs2-xattr-2.6 2006-05-20 17:27:32 +01:00
jhash.h
jiffies.h
journal-head.h
joystick.h Switch to __s32 types in joystick.h instead of C99 types for consistency. 2006-06-03 00:27:53 +01:00
kallsyms.h
kbd_diacr.h
kbd_kern.h
kd.h
kdev_t.h
kernel.h [PATCH] symbol_put_addr() locks kernel 2006-05-15 11:20:55 -07:00
kernel_stat.h
kernelcapi.h
kexec.h
key-ui.h
key.h [PATCH] Keys: Fix race between two instantiators of a key 2006-06-22 15:05:56 -07:00
keyboard.h
keyctl.h
kfifo.h
klist.h
kmalloc_sizes.h
kmod.h
kobj_map.h
kobject.h [PATCH] Driver Core: Add /sys/hypervisor when needed 2006-06-21 12:40:48 -07:00
kprobes.h
kref.h
kthread.h
ktime.h
lapb.h
lcd.h
leds.h
libata.h
libps2.h
limits.h
linkage.h
linux_logo.h
list.h [NET]: use hlist_unhashed() 2006-04-29 18:33:15 -07:00
llc.h
loop.h
lp.h
m48t86.h [PATCH] m48t86: ia64 build fix 2006-06-05 12:29:17 -07:00
major.h
matroxfb.h
mbcache.h
mc6821.h
mc146818rtc.h
mca-legacy.h
mca.h
memory.h
memory_hotplug.h
mempolicy.h Merge git://git.infradead.org/hdrcleanup-2.6 2006-06-20 15:10:08 -07:00
mempool.h
meye.h
migrate.h
mii.h Sanitise ethtool.h and mii.h for userspace. 2006-04-29 01:53:47 +01:00
minix_fs.h
miscdevice.h
mm.h
mm_inline.h
mman.h
mmtimer.h
mmzone.h Merge git://git.infradead.org/hdrcleanup-2.6 2006-06-20 15:10:08 -07:00
mod_devicetable.h
module.h Merge git://git.infradead.org/hdrcleanup-2.6 2006-06-20 15:10:08 -07:00
moduleloader.h
moduleparam.h
mount.h
mpage.h
mqueue.h
mroute.h
msdos_fs.h
msg.h
mtio.h
mutex-debug.h
mutex.h
mv643xx.h
n_r3964.h
namei.h
namespace.h
nbd.h Use __uXX types in user-visible structures in <linux/nbd.h> 2006-05-04 02:55:50 +01:00
ncp.h
ncp_fs.h
ncp_fs_i.h
ncp_fs_sb.h
ncp_mount.h
ncp_no.h
net.h
netdevice.h Merge master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6 2006-06-20 17:39:53 -07:00
netfilter.h
netfilter_arp.h
netfilter_bridge.h
netfilter_decnet.h
netfilter_ipv4.h
netfilter_ipv6.h
netfilter_logging.h
netlink.h [PATCH] Reworked patch for labels on user space messages 2006-05-01 06:09:58 -04:00
netpoll.h
netrom.h
nfs.h
nfs2.h
nfs3.h
nfs4.h
nfs4_acl.h
nfs4_mount.h
nfs_fs.h
nfs_fs_i.h
nfs_fs_sb.h
nfs_idmap.h
nfs_mount.h
nfs_page.h
nfs_xdr.h
nfsacl.h
nfsd_idmap.h
nls.h
nmi.h
node.h
nodemask.h
notifier.h
nubus.h
numa.h
nvram.h
openprom_fs.h
oprofile.h
page-flags.h
pagemap.h
pagevec.h
param.h
parport.h
parport_pc.h
parser.h
patchkey.h
pci-acpi.h [PATCH] PCI: fix pciehp compile issue when CONFIG_ACPI is not enabled 2006-06-11 14:02:27 -07:00
pci.h Merge git://git.infradead.org/hdrcleanup-2.6 2006-06-20 15:10:08 -07:00
pci_ids.h Merge master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6 2006-06-19 18:55:56 -07:00
pci_regs.h [PATCH] powerpc: Experimental support for new G5 Macs (#2) 2006-01-09 15:03:17 +11:00
pcieport_if.h
percpu.h
percpu_counter.h
personality.h
pfkeyv2.h [PFKEYV2]: Fix inconsistent typing in struct sadb_x_kmprivate. 2006-06-17 22:54:03 -07:00
pfn.h
pg.h
phonedev.h
phy.h
pid.h
pipe_fs_i.h [PATCH] splice: LRU fixups 2006-05-04 06:55:12 +02:00
pkt_cls.h
pkt_sched.h
pktcdvd.h
platform_device.h
pm.h
pm_legacy.h
pmu.h
pnp.h
pnpbios.h
poll.h
posix-timers.h
posix_acl.h
posix_acl_xattr.h
posix_types.h
ppdev.h
ppp-comp.h
ppp_channel.h
ppp_defs.h Remove PPP_FCS from user view in <linux/ppp_defs.h>, remove __P mess entirely 2006-05-04 12:07:37 +01:00
prctl.h
preempt.h
prefetch.h
prio_tree.h
proc_fs.h
profile.h
ps2esdi.h
ptrace.h
qic117.h
qnx4_fs.h
qnxtypes.h
quota.h
quotaio_v1.h
quotaio_v2.h
quotaops.h
radeonfb.h
radix-tree.h
raid_class.h
ramfs.h
random.h
raw.h
rbtree.h [RBTREE] Switch rb_colour() et al to en_US spelling of 'color' for consistency 2006-06-05 20:19:05 +01:00
rcupdate.h [PATCH] RCU: introduce rcu_needs_cpu() interface 2006-05-15 11:20:55 -07:00
reboot.h
reboot_fixups.h
reiserfs_acl.h
reiserfs_fs.h
reiserfs_fs_i.h
reiserfs_fs_sb.h
reiserfs_xattr.h
relay.h
resource.h
rio.h
rio_drv.h
rio_ids.h
rio_regs.h
rmap.h
romfs_fs.h
root_dev.h
rose.h
route.h
rslib.h
rtc.h
rtnetlink.h
rwsem-spinlock.h
rwsem.h
sc26198.h
scatterlist.h
scc.h
sched.h Merge branch 'audit.b21' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/audit-current 2006-06-20 15:37:56 -07:00
screen_info.h
sctp.h
scx200.h
scx200_gpio.h
sdla.h
sdla_fr.h
seccomp.h
securebits.h
security.h [PATCH] selinux: add hooks for key subsystem 2006-06-22 15:05:55 -07:00
selection.h
selinux.h [SECMARK]: Add SELinux exports 2006-06-17 21:29:55 -07:00
selinux_netlink.h
sem.h
seq_file.h
seqlock.h
serial.h
serial167.h
serialP.h
serial_8250.h
serial_core.h Merge branch 'devel' of master.kernel.org:/home/rmk/linux-2.6-arm 2006-06-20 17:52:36 -07:00
serial_ip3106.h
serial_reg.h
serio.h
shm.h
shmem_fs.h
signal.h Merge git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6 2006-04-29 01:42:26 +01:00
skbuff.h Merge git://git.infradead.org/hdrcleanup-2.6 2006-06-20 15:10:08 -07:00
slab.h Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6 2006-05-24 09:22:21 +01:00
smb.h
smb_fs.h
smb_fs_i.h
smb_fs_sb.h
smb_mount.h
smbno.h
smp.h
smp_lock.h
snmp.h
socket.h
sockios.h
som.h
sonet.h
sonypi.h
sort.h
sound.h
soundcard.h
spinlock.h
spinlock_api_smp.h
spinlock_api_up.h
spinlock_types.h
spinlock_types_up.h
spinlock_up.h
stallion.h
stat.h
statfs.h
stddef.h
stop_machine.h
string.h
stringify.h
superhyway.h
suspend.h
swap.h Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6 2006-05-24 09:22:21 +01:00
swapops.h
synclink.h
sys.h
syscalls.h Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6 2006-05-24 09:22:21 +01:00
sysctl.h [TCP]: Add tcp_slow_start_after_idle sysctl. 2006-06-17 21:30:53 -07:00
sysdev.h [PATCH] Driver Core: Allow sysdev_class have attributes 2006-06-21 12:40:48 -07:00
sysfs.h
sysrq.h
sysv_fs.h
tcp.h Merge git://git.infradead.org/hdrcleanup-2.6 2006-06-20 15:10:08 -07:00
telephony.h
termios.h
textsearch.h
textsearch_fsm.h
tfrc.h
thread_info.h
threads.h
ticable.h
time.h
timer.h
times.h
timex.h
tiocl.h
tipc.h
tipc_config.h
topology.h
toshiba.h
transport_class.h
trdevice.h
tty.h [PATCH] TTY: return class device pointer from tty_register_device() 2006-06-21 12:40:47 -07:00
tty_driver.h
tty_flip.h
tty_ldisc.h
types.h
udf_fs.h
udf_fs_i.h
udf_fs_sb.h
udp.h
ufs_fs.h Remove unneeded inclusion of <linux/time.h> from <linux/ufs_fs.h> 2006-05-04 00:59:14 +01:00
ufs_fs_i.h
ufs_fs_sb.h
uinput.h
uio.h
ultrasound.h
umem.h
un.h
unistd.h Remove 'extern int errno;' from public view in linux/unistd.h 2006-04-29 01:49:06 +01:00
usb.h [PATCH] USB: convert usb class devices to real devices 2006-06-21 15:04:19 -07:00
usb_ch9.h
usb_gadget.h
usb_gadgetfs.h
usb_otg.h
usb_usual.h
usbdevice_fs.h
user.h
utime.h
uts.h
utsname.h
vermagic.h
vfs.h
via.h
video_decoder.h
video_encoder.h
videodev.h
videodev2.h V4L/DVB (3774): Create V4L1 config options 2006-05-12 19:54:53 -03:00
videotext.h
vmalloc.h
vt.h
vt_buffer.h
vt_kern.h Merge git://git.infradead.org/hdrcleanup-2.6 2006-06-20 15:10:08 -07:00
wait.h
wanrouter.h
watchdog.h
wavefront.h
wireless.h
workqueue.h
writeback.h
x25.h
xattr.h
xfrm.h [IPSEC] xfrm: Abstract out encapsulation modes 2006-06-17 21:28:39 -07:00
yam.h
zconf.h
zftape.h
zlib.h
zorro.h
zorro_ids.h
zutil.h