From: Greg KH <gregkh@suse.de>
To: linux-kernel@vger.kernel.org, stable@kernel.org
Cc: stable-review@kernel.org, torvalds@linux-foundation.org,
akpm@linux-foundation.org, alan@lxorguk.ukuu.org.uk,
Herton Ronaldo Krzesinski <herton.krzesinski@canonical.com>,
Chris Wilson <chris@chris-wilson.co.uk>
Subject: [46/55] drm/i915: Prevent racy removal of request from client list
Date: Fri, 25 Mar 2011 16:47:39 -0700 [thread overview]
Message-ID: <20110325234843.819686600@clark.kroah.org> (raw)
In-Reply-To: <20110325234853.GA21145@kroah.com>
2.6.37-stable review patch. If anyone has any objections, please let us know.
------------------
From: Herton Ronaldo Krzesinski <herton.krzesinski@canonical.com>
commit 09bfa51773c1e90f13000dc2fc0c4b84047009bc upstream.
When i915_gem_retire_requests_ring calls i915_gem_request_remove_from_client,
the client_list for that request may already be removed in i915_gem_release.
So we may call twice list_del(&request->client_list), resulting in an
oops like this report:
[126167.230394] BUG: unable to handle kernel paging request at 00100104
[126167.230699] IP: [<f8c2ce44>] i915_gem_retire_requests_ring+0xd4/0x240 [i915]
[126167.231042] *pdpt = 00000000314c1001 *pde = 0000000000000000
[126167.231314] Oops: 0002 [#1] SMP
[126167.231471] last sysfs file: /sys/devices/LNXSYSTM:00/device:00/PNP0C0A:00/power_supply/BAT1/current_now
[126167.231901] Modules linked in: snd_seq_dummy nls_utf8 isofs btrfs zlib_deflate libcrc32c ufs qnx4 hfsplus hfs minix ntfs vfat msdos fat jfs xfs exportfs reiserfs cryptd aes_i586 aes_generic binfmt_misc vboxnetadp vboxnetflt vboxdrv parport_pc ppdev snd_hda_codec_hdmi snd_hda_codec_conexant snd_hda_intel snd_hda_codec snd_hwdep arc4 snd_pcm snd_seq_midi snd_rawmidi snd_seq_midi_event snd_seq uvcvideo videodev snd_timer snd_seq_device joydev iwlagn iwlcore mac80211 snd cfg80211 soundcore i915 drm_kms_helper snd_page_alloc psmouse drm serio_raw i2c_algo_bit video lp parport usbhid hid sky2 sdhci_pci ahci sdhci libahci
[126167.232018]
[126167.232018] Pid: 1101, comm: Xorg Not tainted 2.6.38-6-generic-pae #34-Ubuntu Gateway MC7833U /
[126167.232018] EIP: 0060:[<f8c2ce44>] EFLAGS: 00213246 CPU: 0
[126167.232018] EIP is at i915_gem_retire_requests_ring+0xd4/0x240 [i915]
[126167.232018] EAX: 00200200 EBX: f1ac25b0 ECX: 00000040 EDX: 00100100
[126167.232018] ESI: f1a2801c EDI: e87fc060 EBP: ef4d7dd8 ESP: ef4d7db0
[126167.232018] DS: 007b ES: 007b FS: 00d8 GS: 00e0 SS: 0068
[126167.232018] Process Xorg (pid: 1101, ti=ef4d6000 task=f1ba6500 task.ti=ef4d6000)
[126167.232018] Stack:
[126167.232018] f1a28000 f1a2809c f1a28094 0058bd97 f1aa2400 f1a2801c 0058bd7b 0058bd85
[126167.232018] f1a2801c f1a28000 ef4d7e38 f8c2e995 ef4d7e30 ef4d7e60 c14d1ebc f6b3a040
[126167.232018] f1522cc0 000000db 00000000 f1ba6500 ffffffa1 00000000 00000001 f1a29214
[126167.232018] Call Trace:
Unfortunately the call trace reported was cut, but looking at debug
symbols the crash is at __list_del, when probably list_del is called
twice on the same request->client_list, as the dereferenced value is
LIST_POISON1 + 4, and by looking more at the debug symbols before
list_del call it should have being called by
i915_gem_request_remove_from_client
And as I can see in the code, it seems we indeed have the possibility
to remove a request->client_list twice, which would cause the above,
because we do list_del(&request->client_list) on both
i915_gem_request_remove_from_client and i915_gem_release
As Chris Wilson pointed out, it's indeed the case:
"(...) I had thought that the actual insertion/deletion was serialised
under the struct mutex and the intention of the spinlock was to protect
the unlocked list traversal during throttling. However, I missed that
i915_gem_release() is also called without struct mutex and so we do need
the double check for i915_gem_request_remove_from_client()."
This change does the required check to avoid the duplicate remove of
request->client_list.
Bugzilla: http://bugs.launchpad.net/bugs/733780
Signed-off-by: Herton Ronaldo Krzesinski <herton.krzesinski@canonical.com>
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
drivers/gpu/drm/i915/i915_gem.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -1748,8 +1748,10 @@ i915_gem_request_remove_from_client(stru
return;
spin_lock(&file_priv->mm.lock);
- list_del(&request->client_list);
- request->file_priv = NULL;
+ if (request->file_priv) {
+ list_del(&request->client_list);
+ request->file_priv = NULL;
+ }
spin_unlock(&file_priv->mm.lock);
}
next prev parent reply other threads:[~2011-03-25 23:57 UTC|newest]
Thread overview: 56+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-03-25 23:48 [00/55] 2.6.37.6-stable review Greg KH
2011-03-25 23:46 ` [01/55] ALSA: hda - VIA: Fix stereo mixer recording no sound issue Greg KH
2011-03-25 23:46 ` [02/55] ALSA: hda - VIA: Fix independent headphone " Greg KH
2011-03-25 23:46 ` [03/55] ALSA: hda - VIA: Add missing support for VT1718S in A-A path Greg KH
2011-03-25 23:46 ` [04/55] ALSA: hda - VIA: Fix invalid A-A path volume adjust issue Greg KH
2011-03-25 23:46 ` [05/55] ALSA: hda - VIA: Fix codec type for VT1708BCE at the right timing Greg KH
2011-03-25 23:46 ` [06/55] ALSA: hda - VIA: Fix VT1708 cant build up Headphone control issue Greg KH
2011-03-25 23:47 ` [07/55] ethtool: Compat handling for struct ethtool_rxnfc Greg KH
2011-03-25 23:47 ` [08/55] Revert "slab: Fix missing DEBUG_SLAB last user" Greg KH
2011-03-25 23:47 ` [09/55] aio: wake all waiters when destroying ctx Greg KH
2011-03-25 23:47 ` [10/55] cgroups: if you list_empty() a head then dont list_del() it Greg KH
2011-03-25 23:47 ` [11/55] shmem: let shared anonymous be nonlinear again Greg KH
2011-03-25 23:47 ` [12/55] mm: swap: unlock swapfile inode mutex before closing file on bad swapfiles Greg KH
2011-03-25 23:47 ` [13/55] oom: prevent unnecessary oom kills or kernel panics Greg KH
2011-03-25 23:47 ` [14/55] oom: skip zombies when iterating tasklist Greg KH
2011-03-25 23:47 ` [15/55] oom: avoid deferring oom killer if exiting task is being traced Greg KH
2011-03-25 23:47 ` [16/55] PCI hotplug: acpiphp: set current_state to D0 in register_slot Greg KH
2011-03-25 23:47 ` [17/55] xen: set max_pfn_mapped to the last pfn mapped Greg KH
2011-03-25 23:47 ` [18/55] intel_idle: disable NHM/WSM HW C-state auto-demotion Greg KH
2011-03-25 23:47 ` [19/55] intel_idle: disable Atom/Lincroft " Greg KH
2011-03-25 23:47 ` [20/55] Prevent rt_sigqueueinfo and rt_tgsigqueueinfo from spoofing the signal code Greg KH
2011-03-25 23:47 ` [21/55] ALSA: HDA: Fix internal mic on Dell E5420/E5520 Greg KH
2011-03-25 23:47 ` [22/55] ext3: skip orphan cleanup on rocompat fs Greg KH
2011-03-25 23:47 ` [23/55] sysctl: restrict write access to dmesg_restrict Greg KH
2011-03-25 23:47 ` [24/55] procfs: fix /proc/<pid>/maps heap check Greg KH
2011-03-25 23:47 ` [25/55] proc: protect mm start_code/end_code in /proc/pid/stat Greg KH
2011-03-25 23:47 ` [26/55] fbcon: Bugfix soft cursor detection in Tile Blitting Greg KH
2011-03-25 23:47 ` [27/55] nfsd41: modify the members value of nfsd4_op_flags Greg KH
2011-03-25 23:47 ` [28/55] nfsd4: minor nfs4state.c reshuffling Greg KH
2011-03-25 23:47 ` [29/55] nfsd4: fix struct file leak Greg KH
2011-03-25 23:47 ` [30/55] nfsd: wrong index used in inner loop Greg KH
2011-03-25 23:47 ` [31/55] [media] uvcvideo: Fix uvc_fixup_video_ctrl() format search Greg KH
2011-03-25 23:47 ` [32/55] [media] uvcvideo: Fix descriptor parsing for video output devices Greg KH
2011-03-25 23:47 ` [33/55] sh: Fix ptrace fpu state initialisation Greg KH
2011-03-25 23:47 ` [34/55] sh: Fix ptrace hw_breakpoint handling Greg KH
2011-03-25 23:47 ` [35/55] USB: Do not pass negative length to snoop_urb() Greg KH
2011-03-25 23:47 ` [36/55] ehci-hcd: Bug fix: dont set a QHs Halt bit Greg KH
2011-03-25 23:47 ` [37/55] USB: uss720 fixup refcount position Greg KH
2011-03-25 23:47 ` [38/55] USB: Fix bad dma problem on WDM device disconnect Greg KH
2011-03-25 23:47 ` [39/55] USB: cdc-acm: fix memory corruption / panic Greg KH
2011-03-25 23:47 ` [40/55] USB: cdc-acm: fix potential null-pointer dereference Greg KH
2011-03-25 23:47 ` [41/55] USB: cdc-acm: fix potential null-pointer dereference on disconnect Greg KH
2011-03-25 23:47 ` [42/55] fs: assign sb->s_bdi to default_backing_dev_info if the bdi is going away Greg KH
2011-03-25 23:47 ` [43/55] Input: xen-kbdfront - advertise either absolute or relative coordinates Greg KH
2011-03-25 23:47 ` [44/55] x86: Cleanup highmap after brk is concluded Greg KH
2011-03-25 23:47 ` [45/55] drm: check for modesetting on modeset ioctls Greg KH
2011-03-25 23:47 ` Greg KH [this message]
2011-03-25 23:47 ` [47/55] drm: Fix use-after-free in drm_gem_vm_close() Greg KH
2011-03-25 23:47 ` [48/55] drm/radeon/kms: prefer legacy pll algo for tv-out Greg KH
2011-03-25 23:47 ` [49/55] drm/radeon/kms: fix hardcoded EDID handling Greg KH
2011-03-25 23:47 ` [50/55] perf: Fix tear-down of inherited group events Greg KH
2011-03-25 23:47 ` [51/55] NFS: Fix a hang/infinite loop in nfs_wb_page() Greg KH
2011-03-25 23:47 ` [52/55] SUNRPC: Never reuse the socket port after an xs_close() Greg KH
2011-03-25 23:47 ` [53/55] fs: call security_d_instantiate in d_obtain_alias V2 Greg KH
2011-03-25 23:47 ` [54/55] dcdbas: force SMI to happen when expected Greg KH
2011-03-25 23:47 ` [55/55] ext4: skip orphan cleanup if fs has unknown ROCOMPAT features Greg KH
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20110325234843.819686600@clark.kroah.org \
--to=gregkh@suse.de \
--cc=akpm@linux-foundation.org \
--cc=alan@lxorguk.ukuu.org.uk \
--cc=chris@chris-wilson.co.uk \
--cc=herton.krzesinski@canonical.com \
--cc=linux-kernel@vger.kernel.org \
--cc=stable-review@kernel.org \
--cc=stable@kernel.org \
--cc=torvalds@linux-foundation.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®