From: Lachlan McIlroy <lachlan@sgi.com>
To: Lachlan McIlroy <lachlan@sgi.com>,
Sven Geggus <lists@fuchsschwanzdomain.de>,
xfs@oss.sgi.com
Subject: Re: Ooops in Kernel 2.6.26.2
Date: Tue, 12 Aug 2008 14:36:27 +1000 [thread overview]
Message-ID: <48A1134B.9010606@sgi.com> (raw)
In-Reply-To: <20080812015508.GM6119@disturbed>
Dave Chinner wrote:
> On Mon, Aug 11, 2008 at 05:57:34PM +1000, Lachlan McIlroy wrote:
>> The ticket allocation code got reworked in 2.6.26 and we now free
>> tickets whereas before we used to cache them so the use-after-free
>> went undetected.
>>
>> This patch should do the trick.
>>
>> --- a/fs/xfs/xfs_log.c 2008-08-11 17:47:18.000000000 +1000
>> +++ b/fs/xfs/xfs_log.c 2008-08-11 17:53:24.000000000 +1000
>> @@ -336,15 +364,12 @@ xfs_log_done(xfs_mount_t *mp,
>> } else {
>> xlog_trace_loggrant(log, ticket, "xfs_log_done: (permanent)");
>> xlog_regrant_reserve_log_space(log, ticket);
>> - }
>> -
>> - /* If this ticket was a permanent reservation and we aren't
>> - * trying to release it, reset the inited flags; so next time
>> - * we write, a start record will be written out.
>> - */
>> - if ((ticket->t_flags & XLOG_TIC_PERM_RESERV) &&
>> - (flags & XFS_LOG_REL_PERM_RESERV) == 0)
>> + /* If this ticket was a permanent reservation and we aren't
>> + * trying to release it, reset the inited flags; so next time
>> + * we write, a start record will be written out.
>> + */
>> ticket->t_flags |= XLOG_TIC_INITED;
>> + }
>>
>> return lsn;
>> } /* xfs_log_done */
>
> Looks sane, Lachlan. Good catch, though it makes me wonder how we
> didn't hit it in debug builds with memory poisoning turned on.
> Compiler optimisation, perhaps?
Memory poisoning will only trigger a panic if we use the contents
of the freed structure as an address and dereference it. For the
code above the compiler will take the contents of 'ticket' (which
is still an address) and add the offset of t_flags and then modify
the contents at that address (ie modify the poison pattern).
I think this panic was caused by the page that contained the freed
ticket being unmapped from the kernel - that just comes down to
getting the timing right.
next prev parent reply other threads:[~2008-08-12 4:29 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-08-08 18:09 Ooops in Kernel 2.6.26.2 Sven Geggus
[not found] ` <489FECCD.6050703@sgi.com>
[not found] ` <489FF0EE.5040607@sgi.com>
2008-08-12 1:55 ` Dave Chinner
2008-08-12 4:36 ` Lachlan McIlroy [this message]
2008-09-21 11:46 ` Sven Geggus
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=48A1134B.9010606@sgi.com \
--to=lachlan@sgi.com \
--cc=lists@fuchsschwanzdomain.de \
--cc=xfs@oss.sgi.com \
/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