From 2eacc573df81ca35dd40d7a853d4a7c37c72857f Mon Sep 17 00:00:00 2001 From: Uwe Kleine-König Date: Thu, 2 Mar 2017 15:37:03 +0100 Subject: lseek: tighten error checking and allow negative offsets for SEEK_END MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Uwe Kleine-König Signed-off-by: Sascha Hauer --- fs/fs.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'fs/fs.c') diff --git a/fs/fs.c b/fs/fs.c index e7b6965914..1901c94ad1 100644 --- a/fs/fs.c +++ b/fs/fs.c @@ -910,6 +910,8 @@ loff_t lseek(int fildes, loff_t offset, int whence) case SEEK_SET: if (f->size != FILE_SIZE_STREAM && offset > f->size) goto out; + if (offset < 0) + goto out; pos = offset; break; case SEEK_CUR: @@ -918,9 +920,9 @@ loff_t lseek(int fildes, loff_t offset, int whence) pos = f->pos + offset; break; case SEEK_END: - if (offset) + if (offset > 0) goto out; - pos = f->size; + pos = f->size + offset; break; default: goto out; -- cgit v1.2.3