From: David Brownell <david-b-yBeKhBN/0LDR7s880joybQ@public.gmane.org>
To: Sebastian Siewior <bigeasy-kttTfShzVuc@public.gmane.org>
Cc: spi-devel-general-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org
Subject: Re: [RFC / PATCH] [SPI] get_module while using it.
Date: Fri, 2 May 2008 10:55:11 -0700 [thread overview]
Message-ID: <200805021055.11267.david-b@pacbell.net> (raw)
In-Reply-To: <20080502103205.GA15651-Hfxr4Dq0UpYb1SvskN2V4Q@public.gmane.org>
On Friday 02 May 2008, Sebastian Siewior wrote:
> >> No, I mean that the issue is most likely a spidev bug.
> >
> > Does the appended patch resolve the problem you observed?
>
> Nope. The backtrace:
... shows *new and different* behavior -- right?
> Sending SPI_IOC_[ 4.294967] ------------[ cut here ]------------
> [ 4.294967] Badness at /home/bigeasy/git/linux-2.6-powerpc/kernel/mutex.c:134
> ...
> [ 4.294967] Call Trace:
> [ 4.294967] [df273e10] [00000001] 0x1 (unreliable)
> [ 4.294967] [df273e50] [c01b5148] spidev_ioctl+0x4c8/0x6ec
> [ 4.294967] [df273ec0] [c00861c0] vfs_ioctl+0x88/0xa8
> [ 4.294967] [df273ee0] [c00865e0] do_vfs_ioctl+0x400/0x444
> [ 4.294967] [df273f10] [c0086664] sys_ioctl+0x40/0x70
> [ 4.294967] [df273f40] [c000ded8] ret_from_syscall+0x0/0x3c
> ...
> [ 4.294967] Unable to handle kernel paging request for data at address 0x6b6b6b6b
>
> I started my spidev user, removed the module and then I started to write
> what results in an ioctl. spidev_ioctl+0x4c8/0x6ec is
> drivers/spi/spidev.c:228 and that is the first mutex_lock() in
> spidev_message().
Hmm, now it's referencing freed memory: 0x6b6b6b6b means it
used a pointer and got memory filled with POISON_FREE. With
the particular memory dedicated to managing the spidev state.
That memory is freed only by spidev_classdev_release(), so
it looks like this particular issue is a refcounting bug.
I'll look at it later (unless you make time for it first).
> However you are touching spidev->spi and this is gone isn't it?
The appended update should catch a few spidev_ioctl() references
which the initial patch overlooked ... it goes on top of the patch
I sent first time.
But such a reference *COULD NOT* cause references to a mutex
in memory which has been deleted.
- Dave
--- g26.orig/drivers/spi/spidev.c 2008-05-02 10:16:04.000000000 -0700
+++ g26/drivers/spi/spidev.c 2008-05-02 10:14:39.000000000 -0700
@@ -326,8 +326,16 @@ spidev_ioctl(struct inode *inode, struct
if (err)
return -EFAULT;
+ /* guard against device removal before, or while,
+ * we issue this ioctl.
+ */
spidev = filp->private_data;
- spi = spidev->spi;
+ spin_lock_irq(&spidev->spi_lock);
+ spi = spi_dev_get(spidev->spi);
+ spin_unlock_irq(&spidev->spi_lock);
+
+ if (spi == NULL)
+ return ESHUTDOWN;
switch (cmd) {
/* read requests */
@@ -413,8 +421,10 @@ spidev_ioctl(struct inode *inode, struct
default:
/* segmented and/or full-duplex I/O request */
if (_IOC_NR(cmd) != _IOC_NR(SPI_IOC_MESSAGE(0))
- || _IOC_DIR(cmd) != _IOC_WRITE)
- return -ENOTTY;
+ || _IOC_DIR(cmd) != _IOC_WRITE) {
+ retval = -ENOTTY;
+ break;
+ }
tmp = _IOC_SIZE(cmd);
if ((tmp % sizeof(struct spi_ioc_transfer)) != 0) {
@@ -442,6 +452,7 @@ spidev_ioctl(struct inode *inode, struct
kfree(ioc);
break;
}
+ spi_dev_put(spi);
return retval;
}
-------------------------------------------------------------------------
This SF.net email is sponsored by the 2008 JavaOne(SM) Conference
Don't miss this year's exciting event. There's still time to save $100.
Use priority code J8TL2D2.
http://ad.doubleclick.net/clk;198757673;13503038;p?http://java.sun.com/javaone
next prev parent reply other threads:[~2008-05-02 17:55 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-04-14 19:45 [RFC / PATCH] [SPI] get_module while using it Sebastian Siewior
[not found] ` <20080414194549.GA1363-Hfxr4Dq0UpYb1SvskN2V4Q@public.gmane.org>
2008-04-14 23:23 ` David Brownell
[not found] ` <200804141623.36838.david-b-yBeKhBN/0LDR7s880joybQ@public.gmane.org>
2008-04-15 7:07 ` Sebastian Siewior
[not found] ` <20080415070723.GA18303-Hfxr4Dq0UpYb1SvskN2V4Q@public.gmane.org>
2008-04-15 18:09 ` David Brownell
[not found] ` <200804151109.43278.david-b-yBeKhBN/0LDR7s880joybQ@public.gmane.org>
2008-04-24 9:26 ` Sebastian Siewior
[not found] ` <20080424092605.GC7371-Hfxr4Dq0UpYb1SvskN2V4Q@public.gmane.org>
2008-04-24 18:26 ` David Brownell
[not found] ` <200804241126.01158.david-b-yBeKhBN/0LDR7s880joybQ@public.gmane.org>
2008-05-01 18:08 ` David Brownell
[not found] ` <200805011108.38240.david-b-yBeKhBN/0LDR7s880joybQ@public.gmane.org>
2008-05-02 10:32 ` Sebastian Siewior
[not found] ` <20080502103205.GA15651-Hfxr4Dq0UpYb1SvskN2V4Q@public.gmane.org>
2008-05-02 17:55 ` David Brownell [this message]
[not found] ` <200805021055.11267.david-b-yBeKhBN/0LDR7s880joybQ@public.gmane.org>
2008-05-02 19:29 ` Sebastian Siewior
[not found] ` <20080502192929.GA20326-Hfxr4Dq0UpYb1SvskN2V4Q@public.gmane.org>
2008-05-02 19:58 ` David Brownell
[not found] ` <200805021258.06573.david-b-yBeKhBN/0LDR7s880joybQ@public.gmane.org>
2008-05-08 14:57 ` Sebastian Siewior
[not found] ` <20080508145733.GA18821-Hfxr4Dq0UpYb1SvskN2V4Q@public.gmane.org>
2008-05-22 1:02 ` David Brownell
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=200805021055.11267.david-b@pacbell.net \
--to=david-b-ybekhbn/0ldr7s880joybq@public.gmane.org \
--cc=bigeasy-kttTfShzVuc@public.gmane.org \
--cc=spi-devel-general-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.