From: Vasily Khoruzhick <anarsoul@gmail.com>
To: Grant Likely <grant.likely@secretlab.ca>
Cc: David Brownell <dbrownell@users.sourceforge.net>,
Russell King - ARM Linux <linux@arm.linux.org.uk>,
Marek Vasut <marek.vasut@gmail.com>,
spi-devel-general@lists.sourceforge.net,
Eric Miao <eric.y.miao@gmail.com>,
linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH v3] pxa2xx_spi: fix memory corruption
Date: Mon, 18 Jul 2011 10:56:51 +0300 [thread overview]
Message-ID: <201107181056.51782.anarsoul@gmail.com> (raw)
In-Reply-To: <20110715025331.GL2927@ponder.secretlab.ca>
On Friday 15 July 2011 05:53:31 Grant Likely wrote:
> On Sun, Jul 10, 2011 at 06:18:19PM +0300, Vasily Khoruzhick wrote:
> > pxa2xx_spi_probe allocates struct driver_data and null_dma_buf
> > at same time via spi_alloc_master(), but then calculates
> > null_dma_buf pointer incorrectly, and it causes memory corruption
> > later if DMA usage is enabled.
> >
> > Signed-off-by: Vasily Khoruzhick <anarsoul@gmail.com>
> > ---
> > v2: - add u8 __null_dma_buf[16] to the end of driver_data structure
> >
> > and use it as null_dma_buf after alignment.
> > - use PTR_ALIGN instead of ALIGN
> >
> > v3: - drop (u8 *) cast, use & operator instead, change array name
> >
> > drivers/spi/pxa2xx_spi.c | 9 +++++----
> > 1 files changed, 5 insertions(+), 4 deletions(-)
> >
> > diff --git a/drivers/spi/pxa2xx_spi.c b/drivers/spi/pxa2xx_spi.c
> > index dc25bee..b25fe27 100644
> > --- a/drivers/spi/pxa2xx_spi.c
> > +++ b/drivers/spi/pxa2xx_spi.c
> > @@ -106,6 +106,7 @@ struct driver_data {
> >
> > int rx_channel;
> > int tx_channel;
> > u32 *null_dma_buf;
> >
> > + u8 null_dma_buf_unaligned[16];
>
> Don't dma buffers need to be cache-line aligned?
No, on PXA2xx they need to be 8-bytes aligned (according to PXA27x developer's
manual)
> How large is the actual transfer?
Looks like 8 bytes, but I'm not sure, I'm not author of driver and did not dig
deeply into its code. Just attempting to fix memory corruption.
> Using the __aligned() or __cacheline_aligned
> attribute is the correct way to make sure you've got a data buffer
> that can be used for DMA mixed with other stuff. Then you don't need
> to fool around with PTR_ALIGN or anything.
Errr, it can't be applied to struct field, right? But driver needs per-device
null_dma_buf (there's 3 SPI controllers on PXA2xx)
> g.
Regards
Vasily
WARNING: multiple messages have this Message-ID (diff)
From: anarsoul@gmail.com (Vasily Khoruzhick)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v3] pxa2xx_spi: fix memory corruption
Date: Mon, 18 Jul 2011 10:56:51 +0300 [thread overview]
Message-ID: <201107181056.51782.anarsoul@gmail.com> (raw)
In-Reply-To: <20110715025331.GL2927@ponder.secretlab.ca>
On Friday 15 July 2011 05:53:31 Grant Likely wrote:
> On Sun, Jul 10, 2011 at 06:18:19PM +0300, Vasily Khoruzhick wrote:
> > pxa2xx_spi_probe allocates struct driver_data and null_dma_buf
> > at same time via spi_alloc_master(), but then calculates
> > null_dma_buf pointer incorrectly, and it causes memory corruption
> > later if DMA usage is enabled.
> >
> > Signed-off-by: Vasily Khoruzhick <anarsoul@gmail.com>
> > ---
> > v2: - add u8 __null_dma_buf[16] to the end of driver_data structure
> >
> > and use it as null_dma_buf after alignment.
> > - use PTR_ALIGN instead of ALIGN
> >
> > v3: - drop (u8 *) cast, use & operator instead, change array name
> >
> > drivers/spi/pxa2xx_spi.c | 9 +++++----
> > 1 files changed, 5 insertions(+), 4 deletions(-)
> >
> > diff --git a/drivers/spi/pxa2xx_spi.c b/drivers/spi/pxa2xx_spi.c
> > index dc25bee..b25fe27 100644
> > --- a/drivers/spi/pxa2xx_spi.c
> > +++ b/drivers/spi/pxa2xx_spi.c
> > @@ -106,6 +106,7 @@ struct driver_data {
> >
> > int rx_channel;
> > int tx_channel;
> > u32 *null_dma_buf;
> >
> > + u8 null_dma_buf_unaligned[16];
>
> Don't dma buffers need to be cache-line aligned?
No, on PXA2xx they need to be 8-bytes aligned (according to PXA27x developer's
manual)
> How large is the actual transfer?
Looks like 8 bytes, but I'm not sure, I'm not author of driver and did not dig
deeply into its code. Just attempting to fix memory corruption.
> Using the __aligned() or __cacheline_aligned
> attribute is the correct way to make sure you've got a data buffer
> that can be used for DMA mixed with other stuff. Then you don't need
> to fool around with PTR_ALIGN or anything.
Errr, it can't be applied to struct field, right? But driver needs per-device
null_dma_buf (there's 3 SPI controllers on PXA2xx)
> g.
Regards
Vasily
next prev parent reply other threads:[~2011-07-18 7:56 UTC|newest]
Thread overview: 44+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-07-09 21:14 [PATCH] pxa2xx_spi: fix memory corruption Vasily Khoruzhick
2011-07-09 21:14 ` Vasily Khoruzhick
2011-07-09 23:05 ` Marek Vasut
2011-07-09 23:05 ` Marek Vasut
2011-07-09 23:11 ` Russell King - ARM Linux
2011-07-09 23:11 ` Russell King - ARM Linux
2011-07-10 7:14 ` Marek Vasut
2011-07-10 7:14 ` Marek Vasut
[not found] ` <201107100914.45452.marek.vasut-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2011-07-10 7:57 ` Marek Vasut
2011-07-10 7:57 ` Marek Vasut
2011-07-10 12:09 ` [PATCH v2] " Vasily Khoruzhick
2011-07-10 12:09 ` Vasily Khoruzhick
2011-07-10 12:43 ` Marek Vasut
2011-07-10 12:43 ` Marek Vasut
2011-07-10 13:09 ` Vasily Khoruzhick
2011-07-10 13:09 ` Vasily Khoruzhick
2011-07-10 15:18 ` [PATCH v3] " Vasily Khoruzhick
2011-07-10 15:18 ` Vasily Khoruzhick
[not found] ` <1310311099-24638-1-git-send-email-anarsoul-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2011-07-14 12:17 ` Vasily Khoruzhick
2011-07-14 12:17 ` Vasily Khoruzhick
[not found] ` <201107141517.36147.anarsoul-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2011-07-14 12:21 ` Marek Vasut
2011-07-14 12:21 ` Marek Vasut
2011-07-15 2:53 ` Grant Likely
2011-07-15 2:53 ` Grant Likely
2011-07-15 8:12 ` Russell King - ARM Linux
2011-07-15 8:12 ` Russell King - ARM Linux
[not found] ` <20110715081242.GM23270-l+eeeJia6m9vn6HldHNs0ANdhmdF6hFW@public.gmane.org>
2011-07-15 19:50 ` Grant Likely
2011-07-15 19:50 ` Grant Likely
2011-07-15 20:24 ` Russell King - ARM Linux
2011-07-15 20:24 ` Russell King - ARM Linux
2011-07-15 21:31 ` Grant Likely
2011-07-15 21:31 ` Grant Likely
2011-07-18 10:10 ` Russell King - ARM Linux
2011-07-18 10:10 ` Russell King - ARM Linux
2011-07-18 7:56 ` Vasily Khoruzhick [this message]
2011-07-18 7:56 ` Vasily Khoruzhick
[not found] ` <201107181056.51782.anarsoul-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2011-11-29 14:05 ` Vasily Khoruzhick
2011-11-29 14:05 ` Vasily Khoruzhick
2011-11-29 14:31 ` Marek Vasut
2011-11-29 14:31 ` Marek Vasut
2011-12-07 20:35 ` Wolfram Sang
2011-12-07 20:35 ` Wolfram Sang
[not found] ` <20111207203559.GB3744-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>
2011-12-08 8:19 ` [RESEND PATCH " Vasily Khoruzhick
2011-12-08 8:19 ` Vasily Khoruzhick
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=201107181056.51782.anarsoul@gmail.com \
--to=anarsoul@gmail.com \
--cc=dbrownell@users.sourceforge.net \
--cc=eric.y.miao@gmail.com \
--cc=grant.likely@secretlab.ca \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux@arm.linux.org.uk \
--cc=marek.vasut@gmail.com \
--cc=spi-devel-general@lists.sourceforge.net \
/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.