Prev: [PATCH 1/5] fanotify: fix FMODE_NONOTIFY bit number
Next: [PATCH 0/5] [RESEND] FMODE_NONOTIFY and FMODE_NEG_OFFSET bits
From: Wu Fengguang on 30 Jan 2010 05:00 So as to return a uniform error -EOVERFLOW instead of a random one: # kmem-seek 0xfffffffffffffff0 seek /dev/kmem: Device or resource busy # kmem-seek 0xfffffffffffffff1 seek /dev/kmem: Block device required Suggested by OGAWA Hirofumi. CC: OGAWA Hirofumi <hirofumi(a)mail.parknet.co.jp> Reviewed-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu(a)jp.fujitsu.com> Signed-off-by: Wu Fengguang <fengguang.wu(a)intel.com> --- drivers/char/mem.c | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) --- linux-mm.orig/drivers/char/mem.c 2010-01-30 17:41:51.000000000 +0800 +++ linux-mm/drivers/char/mem.c 2010-01-30 17:42:29.000000000 +0800 @@ -721,16 +721,23 @@ static loff_t memory_lseek(struct file * mutex_lock(&file->f_path.dentry->d_inode->i_mutex); switch (orig) { - case 0: + case SEEK_CUR: + offset += file->f_pos; + if ((unsigned long long)offset < + (unsigned long long)file->f_pos) { + ret = -EOVERFLOW; + break; + } + case SEEK_SET: + /* to avoid userland mistaking f_pos=-9 as -EBADF=-9 */ + if ((unsigned long long)offset >= ~0xFFFULL) { + ret = -EOVERFLOW; + break; + } file->f_pos = offset; ret = file->f_pos; force_successful_syscall_return(); break; - case 1: - file->f_pos += offset; - ret = file->f_pos; - force_successful_syscall_return(); - break; default: ret = -EINVAL; } -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/ |