stable.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Ben Hutchings <ben@decadent.org.uk>
To: linux-kernel@vger.kernel.org, stable@vger.kernel.org
Cc: akpm@linux-foundation.org, Jan Kara <jack@suse.cz>,
	Zheng Liu <gnehzuil.liu@gmail.com>,
	"Theodore Tso" <tytso@mit.edu>
Subject: [ 051/104] jbd2: fix use after free in jbd2_journal_dirty_metadata()
Date: Mon, 25 Mar 2013 01:06:15 +0000	[thread overview]
Message-ID: <20130325010529.347444888@decadent.org.uk> (raw)
In-Reply-To: <20130325010524.240972766@decadent.org.uk>

3.2-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Jan Kara <jack@suse.cz>

commit ad56edad089b56300fd13bb9eeb7d0424d978239 upstream.

jbd2_journal_dirty_metadata() didn't get a reference to journal_head it
was working with. This is OK in most of the cases since the journal head
should be attached to a transaction but in rare occasions when we are
journalling data, __ext4_journalled_writepage() can race with
jbd2_journal_invalidatepage() stripping buffers from a page and thus
journal head can be freed under hands of jbd2_journal_dirty_metadata().

Fix the problem by getting own journal head reference in
jbd2_journal_dirty_metadata() (and also in jbd2_journal_set_triggers()
which can possibly have the same issue).

Reported-by: Zheng Liu <gnehzuil.liu@gmail.com>
Signed-off-by: Jan Kara <jack@suse.cz>
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 fs/jbd2/transaction.c |   15 ++++++++++-----
 1 file changed, 10 insertions(+), 5 deletions(-)

--- a/fs/jbd2/transaction.c
+++ b/fs/jbd2/transaction.c
@@ -1016,9 +1016,12 @@ out:
 void jbd2_journal_set_triggers(struct buffer_head *bh,
 			       struct jbd2_buffer_trigger_type *type)
 {
-	struct journal_head *jh = bh2jh(bh);
+	struct journal_head *jh = jbd2_journal_grab_journal_head(bh);
 
+	if (WARN_ON(!jh))
+		return;
 	jh->b_triggers = type;
+	jbd2_journal_put_journal_head(jh);
 }
 
 void jbd2_buffer_frozen_trigger(struct journal_head *jh, void *mapped_data,
@@ -1070,17 +1073,18 @@ int jbd2_journal_dirty_metadata(handle_t
 {
 	transaction_t *transaction = handle->h_transaction;
 	journal_t *journal = transaction->t_journal;
-	struct journal_head *jh = bh2jh(bh);
+	struct journal_head *jh;
 	int ret = 0;
 
-	jbd_debug(5, "journal_head %p\n", jh);
-	JBUFFER_TRACE(jh, "entry");
 	if (is_handle_aborted(handle))
 		goto out;
-	if (!buffer_jbd(bh)) {
+	jh = jbd2_journal_grab_journal_head(bh);
+	if (!jh) {
 		ret = -EUCLEAN;
 		goto out;
 	}
+	jbd_debug(5, "journal_head %p\n", jh);
+	JBUFFER_TRACE(jh, "entry");
 
 	jbd_lock_bh_state(bh);
 
@@ -1171,6 +1175,7 @@ int jbd2_journal_dirty_metadata(handle_t
 	spin_unlock(&journal->j_list_lock);
 out_unlock_bh:
 	jbd_unlock_bh_state(bh);
+	jbd2_journal_put_journal_head(jh);
 out:
 	JBUFFER_TRACE(jh, "exit");
 	WARN_ON(ret);	/* All errors are bugs, so dump the stack */



  parent reply	other threads:[~2013-03-25  1:06 UTC|newest]

Thread overview: 110+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-03-25  0:34 [ 000/104] 3.2.42-stable review Ben Hutchings
2013-03-25  1:05 ` [ 001/104] TTY: do not reset masters packet mode Ben Hutchings
2013-03-25  1:05 ` [ 002/104] perf,x86: fix kernel crash with PEBS/BTS after suspend/resume Ben Hutchings
2013-03-25  1:05 ` [ 003/104] perf,x86: fix wrmsr_on_cpu() warning on suspend/resume Ben Hutchings
2013-03-25  1:05 ` [ 004/104] perf,x86: fix link failure for non-Intel configs Ben Hutchings
2013-03-25  1:05 ` [ 005/104] l2tp: Restore socket refcount when sendmsg succeeds Ben Hutchings
2013-03-25  1:05 ` [ 006/104] rds: limit the size allocated by rds_message_alloc() Ben Hutchings
2013-03-25  1:05 ` [ 007/104] net: ipv6: Dont purge default router if accept_ra=2 Ben Hutchings
2013-03-25  1:05 ` [ 008/104] tcp: fix double-counted receiver RTT when leaving receiver fast path Ben Hutchings
2013-03-25  1:05 ` [ 009/104] tun: add a missing nf_reset() in tun_net_xmit() Ben Hutchings
2013-03-25  1:05 ` [ 010/104] macvlan: Set IFF_UNICAST_FLT flag to prevent unnecessary promisc mode Ben Hutchings
2013-03-25  1:05 ` [ 011/104] netlabel: correctly list all the static label mappings Ben Hutchings
2013-03-25  1:05 ` [ 012/104] bridging: fix rx_handlers return code Ben Hutchings
2013-03-25  1:05 ` [ 013/104] ipv6: stop multicast forwarding to process interface scoped addresses Ben Hutchings
2013-03-25  1:05 ` [ 014/104] rtnl: fix info leak on RTM_GETLINK request for VF devices Ben Hutchings
2013-03-25  1:05 ` [ 015/104] dcbnl: fix various netlink info leaks Ben Hutchings
2013-03-25  1:05 ` [ 016/104] 6lowpan: Fix endianness issue in is_addr_link_local() Ben Hutchings
2013-03-25  1:05 ` [ 017/104] drm/i915: Increase the RC6p threshold Ben Hutchings
2013-03-25  1:05 ` [ 018/104] perf: Revert duplicated commit Ben Hutchings
2013-03-25  1:05 ` [ 019/104] i915: initialize CADL in opregion Ben Hutchings
2013-03-25  1:05 ` [ 020/104] s390/mm: fix flush_tlb_kernel_range() Ben Hutchings
2013-03-25  1:05 ` [ 021/104] mwifiex: fix potential out-of-boundary access to ibss rate table Ben Hutchings
2013-03-25  1:05 ` [ 022/104] rtlwifi: rtl8192cu: Fix schedule while atomic bug splat Ben Hutchings
2013-03-25  1:05 ` [ 023/104] powerpc: Fix cputable entry for 970MP rev 1.0 Ben Hutchings
2013-03-25  1:05 ` [ 024/104] rtlwifi: rtl8192cu: Fix problem that prevents reassociation Ben Hutchings
2013-03-25  1:05 ` [ 025/104] vhost/net: fix heads usage of ubuf_info Ben Hutchings
2013-03-25  1:05 ` [ 026/104] selinux: use GFP_ATOMIC under spin_lock Ben Hutchings
2013-03-25  1:05 ` [ 027/104] tools: hv: Netlink source address validation allows DoS Ben Hutchings
2013-03-25  1:05 ` [ 028/104] udf: avoid info leak on export Ben Hutchings
2013-03-25  1:05 ` [ 029/104] isofs: " Ben Hutchings
2013-03-25  1:05 ` [ 030/104] sunsu: Fix panic in case of nonexistent port at "console=ttySY" cmdline option Ben Hutchings
2013-03-25  1:05 ` [ 031/104] net/ipv4: Ensure that location of timestamp option is stored Ben Hutchings
2013-03-25  1:05 ` [ 032/104] netconsole: dont call __netpoll_cleanup() while atomic Ben Hutchings
2013-03-25  1:05 ` [ 033/104] bonding: dont call update_speed_duplex() under spinlocks Ben Hutchings
2013-03-25  1:05 ` [ 034/104] sctp: Use correct sideffect command in duplicate cookie handling Ben Hutchings
2013-03-25  1:05 ` [ 035/104] sctp: dont break the loop while meeting the active_path so as to find the matched transport Ben Hutchings
2013-03-25  1:06 ` [ 036/104] ipv4: fix definition of FIB_TABLE_HASHSZ Ben Hutchings
2013-03-25  1:06 ` [ 037/104] tcp: fix skb_availroom() Ben Hutchings
2013-03-25  1:06 ` [ 038/104] rtnetlink: Mask the rta_type when range checking Ben Hutchings
2013-03-25  1:06 ` [ 039/104] inet: limit length of fragment queue hash table bucket lists Ben Hutchings
2013-03-25  1:06 ` [ 040/104] sfc: Do not attempt to flush queues if DMA is disabled Ben Hutchings
2013-03-25  1:06 ` [ 041/104] sfc: Convert firmware subtypes to native byte order in efx_mcdi_get_board_cfg() Ben Hutchings
2013-03-25  1:06 ` [ 042/104] sfc: Fix two causes of flush failure Ben Hutchings
2013-03-25  1:06 ` [ 043/104] sfc: lock TX queues when calling netif_device_detach() Ben Hutchings
2013-03-25  1:06 ` [ 044/104] sfc: Fix timekeeping in efx_mcdi_poll() Ben Hutchings
2013-03-25  1:06 ` [ 045/104] sfc: Properly sync RX DMA buffer when it is not the last in the page Ben Hutchings
2013-03-25  1:06 ` [ 046/104] sfc: Fix efx_rx_buf_offset() in the presence of swiotlb Ben Hutchings
2013-03-25  1:06 ` [ 047/104] sfc: Detach net device when stopping queues for reconfiguration Ben Hutchings
2013-03-25  1:06 ` [ 048/104] sfc: Disable soft interrupt handling during efx_device_detach_sync() Ben Hutchings
2013-03-25  1:06 ` [ 049/104] sfc: Only use TX push if a single descriptor is to be written Ben Hutchings
2013-03-25  1:06 ` [ 050/104] ext4: fix the wrong number of the allocated blocks in Ben Hutchings
2013-03-25  1:06 ` Ben Hutchings [this message]
2013-03-25  1:06 ` [ 052/104] ext4: convert number of blocks to clusters properly Ben Hutchings
2013-03-25  1:06 ` [ 053/104] ext4: use atomic64_t for the per-flexbg free_clusters count Ben Hutchings
2013-03-25  1:06 ` [ 054/104] tracing: Fix race in snapshot swapping Ben Hutchings
2013-03-25  1:06 ` [ 055/104] cifs: delay super block destruction until all cifsFileInfo objects Ben Hutchings
2013-03-25  1:06 ` [ 056/104] drm/i915: restrict kernel address leak in debugfs Ben Hutchings
2013-03-25  1:06 ` [ 057/104] drm/i915: bounds check execbuffer relocation count Ben Hutchings
2013-03-25  1:06 ` [ 058/104] tracing: Fix free of probe entry by calling call_rcu_sched() Ben Hutchings
2013-03-25  1:06 ` [ 059/104] tracing: Protect tracer flags with trace_types_lock Ben Hutchings
2013-03-25  1:06 ` [ 060/104] tracing: Keep overwrite in sync between regular and snapshot buffers Ben Hutchings
2013-03-25  1:06 ` [ 061/104] tracing: Prevent buffer overwrite disabled for latency tracers Ben Hutchings
2013-03-25  1:06 ` [ 062/104] USB: xhci: correctly enable interrupts Ben Hutchings
2013-03-25  1:06 ` [ 063/104] usb-storage: add unusual_devs entry for Samsung YP-Z3 mp3 player Ben Hutchings
2013-03-25  1:06 ` [ 064/104] drm/radeon/benchmark: make sure bo blit copy exists before using it Ben Hutchings
2013-03-25  1:06 ` [ 065/104] ALSA: hda/cirrus - Fix the digital beep registration Ben Hutchings
2013-03-25  1:06 ` [ 066/104] USB: xhci - fix bit definitions for IMAN register Ben Hutchings
2013-03-25  1:06 ` [ 067/104] x86-64: Fix the failure case in copy_user_handle_tail() Ben Hutchings
2013-03-25  1:06 ` [ 068/104] ALSA: snd-usb: mixer: propagate errors up the call chain Ben Hutchings
2013-03-25  1:06 ` [ 069/104] ALSA: snd-usb: mixer: ignore -EINVAL in snd_usb_mixer_controls() Ben Hutchings
2013-03-25  1:06 ` [ 070/104] ext4: fix data=journal fast mount/umount hang Ben Hutchings
2013-03-25  1:06 ` [ 071/104] ALSA: hda - Fix typo in checking IEC958 emphasis bit Ben Hutchings
2013-03-25  1:06 ` [ 072/104] usb: gadget: udc-core: fix a regression during gadget driver Ben Hutchings
2013-03-25  1:06 ` [ 073/104] dm thin: fix discard corruption Ben Hutchings
2013-03-25  1:06 ` [ 074/104] efivars: Allow disabling use as a pstore backend Ben Hutchings
2013-03-25  1:06 ` [ 075/104] efivars: Add module parameter to disable " Ben Hutchings
2013-03-25  1:06 ` [ 076/104] efivars: Fix check for CONFIG_EFI_VARS_PSTORE_DEFAULT_DISABLE Ben Hutchings
2013-03-25  1:06 ` [ 077/104] efi_pstore: Introducing workqueue updating sysfs Ben Hutchings
2013-03-25  1:06 ` [ 078/104] efivars: explicitly calculate length of VariableName Ben Hutchings
2013-03-25  1:06 ` [ 079/104] efivars: Handle duplicate names from get_next_variable() Ben Hutchings
2013-03-25  1:06 ` [ 080/104] cifs: ignore everything in SPNEGO blob after mechTypes Ben Hutchings
2013-03-25  1:06 ` [ 081/104] USB: garmin_gps: fix memory leak on disconnect Ben Hutchings
2013-03-25  1:06 ` [ 082/104] USB: io_ti: fix get_icount for two port adapters Ben Hutchings
2013-03-25  1:06 ` [ 083/104] USB: serial: fix interface refcounting Ben Hutchings
2013-03-25  1:06 ` [ 084/104] USB: serial: add modem-status-change wait queue Ben Hutchings
2013-03-26 15:36   ` Johan Hovold
2013-03-27  2:35     ` Ben Hutchings
2013-03-25  1:06 ` [ 085/104] USB: ark3116: fix use-after-free in TIOCMIWAIT Ben Hutchings
2013-03-25  1:06 ` [ 086/104] USB: ch341: " Ben Hutchings
2013-03-25  1:06 ` [ 087/104] USB: cypress_m8: " Ben Hutchings
2013-03-25  1:06 ` [ 088/104] USB: ftdi_sio: " Ben Hutchings
2013-03-25  1:06 ` [ 089/104] USB: io_edgeport: " Ben Hutchings
2013-03-25  1:06 ` [ 090/104] USB: io_ti: " Ben Hutchings
2013-03-25  1:06 ` [ 091/104] USB: mct_u232: " Ben Hutchings
2013-03-25  1:06 ` [ 092/104] USB: mos7840: fix broken TIOCMIWAIT Ben Hutchings
2013-03-25  1:06 ` [ 093/104] USB: mos7840: fix use-after-free in TIOCMIWAIT Ben Hutchings
2013-03-25  1:06 ` [ 094/104] USB: oti6858: " Ben Hutchings
2013-03-25  1:06 ` [ 095/104] USB: pl2303: " Ben Hutchings
2013-03-25  1:07 ` [ 096/104] USB: spcp8x5: " Ben Hutchings
2013-03-25  1:07 ` [ 097/104] USB: ssu100: " Ben Hutchings
2013-03-25  1:07 ` [ 098/104] USB: ti_usb_3410_5052: " Ben Hutchings
2013-03-25  1:07 ` [ 099/104] i2c: tegra: check the clk_prepare_enable() return value Ben Hutchings
2013-03-25  1:07 ` [ 100/104] vfs,proc: guarantee unique inodes in /proc Ben Hutchings
2013-03-25  1:07 ` [ 101/104] mm/hugetlb: fix total hugetlbfs pages count when using memory Ben Hutchings
2013-03-25  1:07 ` [ 102/104] KMS: fix EDID detailed timing vsync parsing Ben Hutchings
2013-03-25  1:07 ` [ 103/104] KMS: fix EDID detailed timing frame rate Ben Hutchings
2013-03-25  1:07 ` [ 104/104] efivars: pstore: Do not check size when erasing variable Ben Hutchings
2013-03-25  2:06 ` [ 000/104] 3.2.42-stable review Ben Hutchings
2013-03-26 13:01 ` Satoru Takeuchi
2013-03-26 19:03   ` Ben Hutchings

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=20130325010529.347444888@decadent.org.uk \
    --to=ben@decadent.org.uk \
    --cc=akpm@linux-foundation.org \
    --cc=gnehzuil.liu@gmail.com \
    --cc=jack@suse.cz \
    --cc=linux-kernel@vger.kernel.org \
    --cc=stable@vger.kernel.org \
    --cc=tytso@mit.edu \
    /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;
as well as URLs for NNTP newsgroup(s).