* [PATCH][RESEND] staging: zram: fix invalid memory references during disk write
@ 2013-01-02 16:53 Nitin Gupta
2013-01-04 20:25 ` Nitin Gupta
0 siblings, 1 reply; 4+ messages in thread
From: Nitin Gupta @ 2013-01-02 16:53 UTC (permalink / raw)
To: Greg KH
Cc: Jerome Marchand, Minchan Kim, Seth Jennings,
Konrad Rzeszutek Wilk, Dan Carpenter, Sam Hansen,
Linux Driver Project, linux-kernel
Fixes a bug introduced by commit c8f2f0db1 ("zram: Fix handling
of incompressible pages") which caused invalid memory references
during disk write. Invalid references could occur in two cases:
- Incoming data expands on compression: In this case, reference was
made to kunmap()'ed bio page.
- Partial (non PAGE_SIZE) write with incompressible data: In this
case, reference was made to a kfree()'ed buffer.
Fixes bug 50081:
https://bugzilla.kernel.org/show_bug.cgi?id=50081
Signed-off-by: Nitin Gupta <ngupta@vflare.org>
Reported-by: Mihail Kasadjikov <hamer.mk@gmail.com>
Reported-by: Tomas M <tomas@slax.org>
Reviewed-by: Minchan Kim <minchan@kernel.org>
---
drivers/staging/zram/zram_drv.c | 39 ++++++++++++++++++++++++---------------
1 file changed, 24 insertions(+), 15 deletions(-)
diff --git a/drivers/staging/zram/zram_drv.c b/drivers/staging/zram/zram_drv.c
index fb4a7c9..f2a73bd 100644
--- a/drivers/staging/zram/zram_drv.c
+++ b/drivers/staging/zram/zram_drv.c
@@ -265,7 +265,7 @@ out_cleanup:
static int zram_bvec_write(struct zram *zram, struct bio_vec *bvec, u32 index,
int offset)
{
- int ret;
+ int ret = 0;
size_t clen;
unsigned long handle;
struct page *page;
@@ -286,10 +286,8 @@ static int zram_bvec_write(struct zram *zram, struct bio_vec *bvec, u32 index,
goto out;
}
ret = zram_decompress_page(zram, uncmem, index);
- if (ret) {
- kfree(uncmem);
+ if (ret)
goto out;
- }
}
/*
@@ -302,16 +300,18 @@ static int zram_bvec_write(struct zram *zram, struct bio_vec *bvec, u32 index,
user_mem = kmap_atomic(page);
- if (is_partial_io(bvec))
+ if (is_partial_io(bvec)) {
memcpy(uncmem + offset, user_mem + bvec->bv_offset,
bvec->bv_len);
- else
+ kunmap_atomic(user_mem);
+ user_mem = NULL;
+ } else {
uncmem = user_mem;
+ }
if (page_zero_filled(uncmem)) {
- kunmap_atomic(user_mem);
- if (is_partial_io(bvec))
- kfree(uncmem);
+ if (!is_partial_io(bvec))
+ kunmap_atomic(user_mem);
zram_stat_inc(&zram->stats.pages_zero);
zram_set_flag(zram, index, ZRAM_ZERO);
ret = 0;
@@ -321,9 +321,11 @@ static int zram_bvec_write(struct zram *zram, struct bio_vec *bvec, u32 index,
ret = lzo1x_1_compress(uncmem, PAGE_SIZE, src, &clen,
zram->compress_workmem);
- kunmap_atomic(user_mem);
- if (is_partial_io(bvec))
- kfree(uncmem);
+ if (!is_partial_io(bvec)) {
+ kunmap_atomic(user_mem);
+ user_mem = NULL;
+ uncmem = NULL;
+ }
if (unlikely(ret != LZO_E_OK)) {
pr_err("Compression failed! err=%d\n", ret);
@@ -332,8 +334,10 @@ static int zram_bvec_write(struct zram *zram, struct bio_vec *bvec, u32 index,
if (unlikely(clen > max_zpage_size)) {
zram_stat_inc(&zram->stats.bad_compress);
- src = uncmem;
clen = PAGE_SIZE;
+ src = NULL;
+ if (is_partial_io(bvec))
+ src = uncmem;
}
handle = zs_malloc(zram->mem_pool, clen);
@@ -345,7 +349,11 @@ static int zram_bvec_write(struct zram *zram, struct bio_vec *bvec, u32 index,
}
cmem = zs_map_object(zram->mem_pool, handle, ZS_MM_WO);
+ if ((clen == PAGE_SIZE) && !is_partial_io(bvec))
+ src = kmap_atomic(page);
memcpy(cmem, src, clen);
+ if ((clen == PAGE_SIZE) && !is_partial_io(bvec))
+ kunmap_atomic(src);
zs_unmap_object(zram->mem_pool, handle);
@@ -358,9 +366,10 @@ static int zram_bvec_write(struct zram *zram, struct bio_vec *bvec, u32 index,
if (clen <= PAGE_SIZE / 2)
zram_stat_inc(&zram->stats.good_compress);
- return 0;
-
out:
+ if (is_partial_io(bvec))
+ kfree(uncmem);
+
if (ret)
zram_stat64_inc(zram, &zram->stats.failed_writes);
return ret;
--
1.7.10.4
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH][RESEND] staging: zram: fix invalid memory references during disk write
2013-01-02 16:53 [PATCH][RESEND] staging: zram: fix invalid memory references during disk write Nitin Gupta
@ 2013-01-04 20:25 ` Nitin Gupta
2013-01-08 22:00 ` Nitin Gupta
0 siblings, 1 reply; 4+ messages in thread
From: Nitin Gupta @ 2013-01-04 20:25 UTC (permalink / raw)
To: Greg KH
Cc: Jerome Marchand, Minchan Kim, Seth Jennings,
Konrad Rzeszutek Wilk, Dan Carpenter, Sam Hansen,
Linux Driver Project, linux-kernel
On Wed, Jan 2, 2013 at 8:53 AM, Nitin Gupta <ngupta@vflare.org> wrote:
> Fixes a bug introduced by commit c8f2f0db1 ("zram: Fix handling
> of incompressible pages") which caused invalid memory references
> during disk write. Invalid references could occur in two cases:
> - Incoming data expands on compression: In this case, reference was
> made to kunmap()'ed bio page.
> - Partial (non PAGE_SIZE) write with incompressible data: In this
> case, reference was made to a kfree()'ed buffer.
>
> Fixes bug 50081:
> https://bugzilla.kernel.org/show_bug.cgi?id=50081
>
Greg: can you please add this to staging? It fixes an important issue
and is tested by many users.
Nitin
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH][RESEND] staging: zram: fix invalid memory references during disk write
2013-01-04 20:25 ` Nitin Gupta
@ 2013-01-08 22:00 ` Nitin Gupta
2013-01-08 22:13 ` Greg KH
0 siblings, 1 reply; 4+ messages in thread
From: Nitin Gupta @ 2013-01-08 22:00 UTC (permalink / raw)
To: Greg KH
Cc: Jerome Marchand, Minchan Kim, Seth Jennings,
Konrad Rzeszutek Wilk, Dan Carpenter, Sam Hansen,
Linux Driver Project, linux-kernel
On Fri, Jan 4, 2013 at 12:25 PM, Nitin Gupta <ngupta@vflare.org> wrote:
> On Wed, Jan 2, 2013 at 8:53 AM, Nitin Gupta <ngupta@vflare.org> wrote:
>> Fixes a bug introduced by commit c8f2f0db1 ("zram: Fix handling
>> of incompressible pages") which caused invalid memory references
>> during disk write. Invalid references could occur in two cases:
>> - Incoming data expands on compression: In this case, reference was
>> made to kunmap()'ed bio page.
>> - Partial (non PAGE_SIZE) write with incompressible data: In this
>> case, reference was made to a kfree()'ed buffer.
>>
>> Fixes bug 50081:
>> https://bugzilla.kernel.org/show_bug.cgi?id=50081
>>
>
> Greg: can you please add this to staging? It fixes an important issue
> and is tested by many users.
>
It's still not in staging. Any reason why you want to accept this patch?
Of course, this is the last reminder, won't bother you again.
Thanks,
Nitin
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH][RESEND] staging: zram: fix invalid memory references during disk write
2013-01-08 22:00 ` Nitin Gupta
@ 2013-01-08 22:13 ` Greg KH
0 siblings, 0 replies; 4+ messages in thread
From: Greg KH @ 2013-01-08 22:13 UTC (permalink / raw)
To: Nitin Gupta
Cc: Jerome Marchand, Minchan Kim, Seth Jennings,
Konrad Rzeszutek Wilk, Dan Carpenter, Sam Hansen,
Linux Driver Project, linux-kernel
On Tue, Jan 08, 2013 at 02:00:27PM -0800, Nitin Gupta wrote:
> On Fri, Jan 4, 2013 at 12:25 PM, Nitin Gupta <ngupta@vflare.org> wrote:
> > On Wed, Jan 2, 2013 at 8:53 AM, Nitin Gupta <ngupta@vflare.org> wrote:
> >> Fixes a bug introduced by commit c8f2f0db1 ("zram: Fix handling
> >> of incompressible pages") which caused invalid memory references
> >> during disk write. Invalid references could occur in two cases:
> >> - Incoming data expands on compression: In this case, reference was
> >> made to kunmap()'ed bio page.
> >> - Partial (non PAGE_SIZE) write with incompressible data: In this
> >> case, reference was made to a kfree()'ed buffer.
> >>
> >> Fixes bug 50081:
> >> https://bugzilla.kernel.org/show_bug.cgi?id=50081
> >>
> >
> > Greg: can you please add this to staging? It fixes an important issue
> > and is tested by many users.
> >
>
>
> It's still not in staging. Any reason why you want to accept this patch?
Because I'm still catching up after being on vacation for 3 weeks? I
only got back yesterday and have a few thousand emails/patches to make
it through. Patches for staging drivers are way down on the list of
priorities for me, especially the zram/zcache/zwhatever mess that we
currently have...
Don't worry, it's not lost, and will make it in soon, please give me a
chance.
greg k-h
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2013-01-08 22:13 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-01-02 16:53 [PATCH][RESEND] staging: zram: fix invalid memory references during disk write Nitin Gupta
2013-01-04 20:25 ` Nitin Gupta
2013-01-08 22:00 ` Nitin Gupta
2013-01-08 22:13 ` Greg KH
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox