On (04/13/17 09:17), Minchan Kim wrote: > The copy_page is optimized memcpy for page-alinged address. > If it is used with non-page aligned address, it can corrupt memory which > means system corruption. With zram, it can happen with > > 1. 64K architecture > 2. partial IO > 3. slub debug > > Partial IO need to allocate a page and zram allocates it via kmalloc. > With slub debug, kmalloc(PAGE_SIZE) doesn't return page-size aligned > address. And finally, copy_page(mem, cmem) corrupts memory. > > So, this patch changes it to memcpy. > > Acutaully, we don't need to change zram_bvec_write part because zsmalloc > returns page-aligned address in case of PAGE_SIZE class but it's not > good to rely on the internal of zsmalloc. > > Note: > When this patch is merged to stable, clear_page should be fixed, too. > Unfortunately, recent zram removes it by "same page merge" feature > so it's hard to backport this patch to -stable tree. > > I will handle it when I receive the mail from stable tree maintainer > to merge this patch to backport. > > Fixes: 42e99bd ("zram: optimize memory operations with clear_page()/copy_page()") > Cc: stable@xxxxxxxxxxxxxxx > Signed-off-by: Minchan Kim <minchan@xxxxxxxxxx> Reviewed-by: Sergey Senozhatsky <sergey.senozhatsky@xxxxxxxxx> -ss