kernel-ark/include/media
Jarod Wilson 08aeb7c9a4 [media] rc: add locking to fix register/show race
When device_add is called in rc_register_device, the rc sysfs nodes show
up, and there's a window in which ir-keytable can be launched via udev
and trigger a show_protocols call, which runs without various rc_dev
fields filled in yet. Add some locking around registration and
store/show_protocols to prevent that from happening.

The problem manifests thusly:

[64692.957872] BUG: unable to handle kernel NULL pointer dereference at 0000000000000090
[64692.957878] IP: [<ffffffffa036a4c1>] show_protocols+0x47/0xf1 [rc_core]
[64692.957890] PGD 19cfc7067 PUD 19cfc6067 PMD 0
[64692.957894] Oops: 0000 [#1] SMP
[64692.957897] last sysfs file: /sys/devices/pci0000:00/0000:00:03.1/usb3/3-1/3-1:1.0/rc/rc2/protocols
[64692.957902] CPU 3
[64692.957903] Modules linked in: redrat3(+) ir_lirc_codec lirc_dev ir_sony_decoder ir_jvc_decoder ir_rc6_decoder ir_rc5_decoder rc_hauppauge ir_nec
_decoder rc_core ip6t_REJECT nf_conntrack_ipv6 nf_defrag_ipv6 ip6table_filter ip6_tables snd_emu10k1_synth snd_emux_synth snd_seq_virmidi snd_seq_mi
di_event snd_seq_midi_emul snd_emu10k1 snd_rawmidi snd_ac97_codec ac97_bus snd_seq snd_pcm snd_seq_device snd_timer snd_page_alloc snd_util_mem pcsp
kr tg3 snd_hwdep emu10k1_gp snd amd64_edac_mod gameport edac_core soundcore edac_mce_amd k8temp shpchp i2c_piix4 lm63 e100 mii uinput ipv6 raid0 rai
d1 ata_generic firewire_ohci pata_acpi firewire_core crc_itu_t sata_svw pata_serverworks floppy radeon ttm drm_kms_helper drm i2c_algo_bit i2c_core
[last unloaded: redrat3]
[64692.957949] [64692.957952] Pid: 12265, comm: ir-keytable Tainted: G   M    W   2.6.39-rc6+ #2 empty empty/TYAN Thunder K8HM S3892
[64692.957957] RIP: 0010:[<ffffffffa036a4c1>]  [<ffffffffa036a4c1>] show_protocols+0x47/0xf1 [rc_core]
[64692.957962] RSP: 0018:ffff880194509e38  EFLAGS: 00010202
[64692.957964] RAX: 0000000000000000 RBX: ffffffffa036d1e0 RCX: ffffffffa036a47a
[64692.957966] RDX: ffff88019a84d000 RSI: ffffffffa036d1e0 RDI: ffff88019cf2f3f0
[64692.957969] RBP: ffff880194509e68 R08: 0000000000000002 R09: 0000000000000000
[64692.957971] R10: 0000000000000002 R11: 0000000000001617 R12: ffff88019a84d000
[64692.957973] R13: 0000000000001000 R14: ffff8801944d2e38 R15: ffff88019ce5f190
[64692.957976] FS:  00007f0a30c9a720(0000) GS:ffff88019fc00000(0000) knlGS:0000000000000000
[64692.957979] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[64692.957981] CR2: 0000000000000090 CR3: 000000019a8e0000 CR4: 00000000000006e0
[64692.957983] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
[64692.957986] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
[64692.957989] Process ir-keytable (pid: 12265, threadinfo ffff880194508000, task ffff88019a9fc720)
[64692.957991] Stack:
[64692.957992]  0000000000000002 ffffffffa036d1e0 ffff880194509f58 0000000000001000
[64692.957997]  ffff8801944d2e38 ffff88019ce5f190 ffff880194509e98 ffffffff8131484b
[64692.958001]  ffffffff8118e923 ffffffff810e9b2f ffff880194509e98 ffff8801944d2e18
[64692.958005] Call Trace:
[64692.958014]  [<ffffffff8131484b>] dev_attr_show+0x27/0x4e
[64692.958014]  [<ffffffff8118e923>] ? sysfs_read_file+0x94/0x172
[64692.958014]  [<ffffffff810e9b2f>] ? __get_free_pages+0x16/0x52
[64692.958014]  [<ffffffff8118e94c>] sysfs_read_file+0xbd/0x172
[64692.958014]  [<ffffffff8113205e>] vfs_read+0xac/0xf3
[64692.958014]  [<ffffffff8113347b>] ? fget_light+0x3a/0xa1
[64692.958014]  [<ffffffff811320f2>] sys_read+0x4d/0x74
[64692.958014]  [<ffffffff814c19c2>] system_call_fastpath+0x16/0x1b

Its a bit difficult to reproduce, but I'm fairly confident this has
fixed the problem.

Signed-off-by: Jarod Wilson <jarod@redhat.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
2011-05-20 16:21:22 -03:00
..
davinci Fix common misspellings 2011-03-31 11:26:23 -03:00
adv7343.h
ak881x.h V4L/DVB: V4L: v4l2-subdev driver for AK8813 and AK8814 TV-encoders from AKM 2010-05-19 12:58:02 -03:00
bt819.h [media] bt819: the ioctls in the header are internal to the kernel 2010-12-29 08:17:19 -02:00
cs53l32a.h
cs5345.h
cx2341x.h [media] v4l2-ctrls: use const char * const * for the menu arrays 2010-12-30 08:02:14 -02:00
cx25840.h V4L/DVB: cx25840/ivtv: replace ugly priv control with s_config 2010-08-08 23:43:05 -03:00
i2c-addr.h
ir-kbd-i2c.h [media] rc: Rename remote controller type to rc_type instead of ir_type 2010-12-29 08:16:50 -02:00
lirc_dev.h [media] lirc_dev: add some __user annotations 2010-12-29 08:16:55 -02:00
lirc.h Fix common misspellings 2011-03-31 11:26:23 -03:00
m52790.h
media-device.h [media] media: Links setup 2011-03-22 04:53:16 -03:00
media-devnode.h [media] media: Media device node support 2011-03-22 04:52:22 -03:00
media-entity.h [media] media: Pipelines and media streams 2011-03-22 04:53:17 -03:00
msp3400.h
mt9t112.h V4L/DVB (13670): soc-camera: Add mt9t112 camera driver 2009-12-16 09:27:41 -02:00
mt9v011.h [media] v4l2-subdev: remove core.s_config and v4l2_i2c_new_subdev_cfg() 2011-01-19 11:45:30 -02:00
mt9v032.h [media] v4l: Add mt9v032 sensor driver 2011-05-20 09:29:49 -03:00
noon010pc30.h [media] Add v4l2 subdev driver for NOON010PC30L image sensor 2011-03-21 20:31:40 -03:00
omap1_camera.h [media] SoC Camera: add driver for OMAP1 camera interface 2010-10-21 07:55:37 -02:00
ov772x.h soc-camera: ov772x: Modify buswidth control 2010-02-26 15:11:00 -03:00
pwc-ioctl.h
radio-si4713.h V4L/DVB (12551): FM TX: si4713: Add files to add radio interface for si4713 2009-09-12 12:19:19 -03:00
rc-core.h [media] rc: add locking to fix register/show race 2011-05-20 16:21:22 -03:00
rc-map.h [media] rc: add tivo/nero liquidtv keymap 2011-05-20 09:27:29 -03:00
rj54n1cb0c.h V4L/DVB (13661): rj54n1cb0c: Add cropping, auto white balance, restrict sizes, add platform data 2009-12-16 09:27:30 -02:00
s5p_fimc.h [media] s5p-fimc: Add a platform data entry for MIPI-CSI data alignment 2011-03-22 04:54:18 -03:00
saa6588.h [media] saa6588: rename rds.h to saa6588.h 2010-12-29 08:17:18 -02:00
saa6752hs.h
saa7115.h
saa7127.h
saa7146_vv.h V4L/DVB: saa7146: fix regression of the av7110/budget-av driver 2010-05-06 19:20:50 -03:00
saa7146.h [media] saa7146: Convert from .ioctl to .unlocked_ioctl 2011-01-19 11:28:10 -02:00
sh_mobile_ceu.h V4L/DVB: V4L2: sh_mobile_camera_ceu: add support for CSI2 2010-08-02 16:43:40 -03:00
sh_mobile_csi2.h V4L/DVB: V4L2: soc-camera: add a MIPI CSI-2 driver for SH-Mobile platforms 2010-08-02 16:43:39 -03:00
sh_vou.h [media] sh_vou: Don't use module names to load I2C modules 2010-10-22 21:53:33 -02:00
si4713.h [media] radio-si4713: Add regulator framework support 2010-12-29 08:16:35 -02:00
soc_camera_platform.h [media] V4L: soc_camera_platform: add helper functions to manage device instances 2011-05-20 07:26:14 -03:00
soc_camera.h [media] V4L: soc-camera: add MIPI bus flags 2011-05-20 12:00:41 -03:00
soc_mediabus.h [media] V4L: soc-camera: add a new packing for YUV 4:2:0 type formats 2011-05-20 12:05:08 -03:00
sr030pc30.h [media] Add driver for Siliconfile SR030PC30 VGA camera 2010-10-21 07:55:49 -02:00
timb_radio.h [media] media: Add timberdale video-in driver 2010-12-29 08:16:46 -02:00
timb_video.h [media] media: Add timberdale video-in driver 2010-12-29 08:16:46 -02:00
tuner-types.h
tuner.h [media] tuner: Remove remaining usages of T_DIGITAL_TV 2011-03-21 20:32:04 -03:00
tvaudio.h
tveeprom.h
tvp514x.h V4L/DVB (12246): tvp514x: Migration to sub-device framework 2009-09-19 00:18:09 -03:00
tvp5150.h
tvp7002.h V4L/DVB: Definitions for TVP7002 in DM365 2010-02-26 15:11:01 -03:00
tw9910.h tw9910: use TABs for indentation 2010-02-26 15:10:59 -03:00
upd64031a.h
upd64083.h
v4l2-chip-ident.h [media] V4L: Initial submit of OV9740 driver 2011-03-21 20:32:16 -03:00
v4l2-common.h [media] v4l2_prio: move from v4l2-common to v4l2-dev 2011-03-22 16:37:54 -03:00
v4l2-ctrls.h [media] v4l: Include linux/videodev2.h in media/v4l2-ctrls.h 2011-01-19 11:52:09 -02:00
v4l2-dev.h [media] Revert "V4L/DVB: v4l2-dev: remove get_unmapped_area" 2011-05-20 12:14:40 -03:00
v4l2-device.h [media] v4l2-device: fix a macro definition 2011-04-13 09:53:29 -03:00
v4l2-event.h V4L/DVB: V4L: Events: Add backend 2010-05-19 12:58:06 -03:00
v4l2-fh.h [media] v4l2-fh: add v4l2_fh_is_singular 2011-03-22 16:37:58 -03:00
v4l2-int-device.h
v4l2-ioctl.h [media] v4l2-ioctl: add priority handling support 2011-03-22 16:37:59 -03:00
v4l2-mediabus.h [media] v4l: Move the media/v4l2-mediabus.h header to include/linux 2011-03-22 04:53:21 -03:00
v4l2-mem2mem.h [media] Update Pawel Osciak's e-mail address 2011-03-22 04:55:05 -03:00
v4l2-subdev.h [media] v4l: Add subdev sensor g_skip_frames operation 2011-03-22 04:53:34 -03:00
videobuf2-core.h [media] Update Pawel Osciak's e-mail address 2011-03-22 04:55:05 -03:00
videobuf2-dma-contig.h [media] videobuf2-dma-contig: make cookie() return a pointer to dma_addr_t 2011-03-22 19:41:58 -03:00
videobuf2-dma-sg.h [media] v4l: videobuf2: add DMA scatter/gather allocator 2011-03-21 20:31:34 -03:00
videobuf2-memops.h [media] Update Pawel Osciak's e-mail address 2011-03-22 04:55:05 -03:00
videobuf2-vmalloc.h [media] Update Pawel Osciak's e-mail address 2011-03-22 04:55:05 -03:00
videobuf-core.h [media] V4L: remove V4L1 compatibility mode 2010-12-29 08:17:07 -02:00
videobuf-dma-contig.h V4L/DVB: videobuf: add ext_lock argument to the queue init functions 2010-10-21 01:06:14 -02:00
videobuf-dma-sg.h V4L/DVB: videobuf: add ext_lock argument to the queue init functions 2010-10-21 01:06:14 -02:00
videobuf-dvb.h V4L/DVB (13103): create a standard method for dvb adapter drivers to override frontend ioctls 2009-12-05 18:40:21 -02:00
videobuf-vmalloc.h V4L/DVB: videobuf: add ext_lock argument to the queue init functions 2010-10-21 01:06:14 -02:00
wm8775.h [media] Add proper audio support for Nova-S Plus with wm8775 ADC 2011-03-21 20:32:19 -03:00