* [PATCH 1/2] staging: zcache: fix length type mismatch
@ 2012-02-28 22:01 Seth Jennings
2012-02-29 6:22 ` Dan Carpenter
0 siblings, 1 reply; 2+ messages in thread
From: Seth Jennings @ 2012-02-28 22:01 UTC (permalink / raw)
To: Greg Kroah-Hartman
Cc: Seth Jennings, Dan Magenheimer, Thadeu Lima de Souza Cascardo,
Konrad Rzeszutek Wilk, Nitin Gupta, Robert Jennings, devel,
linux-kernel
This fixes a type mismatch in the compression code where
a size_t pointer was cast to a unsigned int pointer. On
little endian archs, there is no issue. However on big
endian archs, the value is incorrect, taking the high
order bits and truncating the lower order bits.
Signed-off-by: Seth Jennings <sjenning@linux.vnet.ibm.com>
---
drivers/staging/zcache/zcache-main.c | 8 ++++----
1 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/drivers/staging/zcache/zcache-main.c b/drivers/staging/zcache/zcache-main.c
index 238d820..46c7c04 100644
--- a/drivers/staging/zcache/zcache-main.c
+++ b/drivers/staging/zcache/zcache-main.c
@@ -1170,14 +1170,14 @@ static atomic_t zcache_curr_pers_pampd_count = ATOMIC_INIT(0);
static unsigned long zcache_curr_pers_pampd_count_max;
/* forward reference */
-static int zcache_compress(struct page *from, void **out_va, size_t *out_len);
+static int zcache_compress(struct page *from, void **out_va, unsigned *out_len);
static void *zcache_pampd_create(char *data, size_t size, bool raw, int eph,
struct tmem_pool *pool, struct tmem_oid *oid,
uint32_t index)
{
void *pampd = NULL, *cdata;
- size_t clen;
+ unsigned clen;
int ret;
unsigned long count;
struct page *page = (struct page *)(data);
@@ -1326,7 +1326,7 @@ static struct tmem_pamops zcache_pamops = {
static DEFINE_PER_CPU(unsigned char *, zcache_dstmem);
#define ZCACHE_DSTMEM_ORDER 1
-static int zcache_compress(struct page *from, void **out_va, size_t *out_len)
+static int zcache_compress(struct page *from, void **out_va, unsigned *out_len)
{
int ret = 0;
unsigned char *dmem = __get_cpu_var(zcache_dstmem);
@@ -1339,7 +1339,7 @@ static int zcache_compress(struct page *from, void **out_va, size_t *out_len)
from_va = kmap_atomic(from, KM_USER0);
mb();
ret = zcache_comp_op(ZCACHE_COMPOP_COMPRESS, from_va, PAGE_SIZE, dmem,
- (unsigned int *)out_len);
+ out_len);
BUG_ON(ret);
*out_va = dmem;
kunmap_atomic(from_va, KM_USER0);
--
1.7.5.4
^ permalink raw reply related [flat|nested] 2+ messages in thread* Re: [PATCH 1/2] staging: zcache: fix length type mismatch
2012-02-28 22:01 [PATCH 1/2] staging: zcache: fix length type mismatch Seth Jennings
@ 2012-02-29 6:22 ` Dan Carpenter
0 siblings, 0 replies; 2+ messages in thread
From: Dan Carpenter @ 2012-02-29 6:22 UTC (permalink / raw)
To: Seth Jennings
Cc: Greg Kroah-Hartman, devel, Dan Magenheimer, Konrad Rzeszutek Wilk,
Thadeu Lima de Souza Cascardo, linux-kernel, Robert Jennings,
Nitin Gupta
[-- Attachment #1: Type: text/plain, Size: 578 bytes --]
On Tue, Feb 28, 2012 at 04:01:37PM -0600, Seth Jennings wrote:
> This fixes a type mismatch in the compression code where
> a size_t pointer was cast to a unsigned int pointer. On
> little endian archs, there is no issue. However on big
> endian archs, the value is incorrect, taking the high
> order bits and truncating the lower order bits.
I would think this would be a problem on any 64bit machine not just
big endian ones. Since clen is half uninitialized we would likely
hit the clen > zbud_max_buddy_size() test.
Anyway the patch is right.
regards,
dan carpenter
[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 836 bytes --]
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2012-02-29 6:20 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-02-28 22:01 [PATCH 1/2] staging: zcache: fix length type mismatch Seth Jennings
2012-02-29 6:22 ` Dan Carpenter
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).